您的位置:首页 > 其它

【练习4.2】使用鼠标事件获取图片像素值

2014-07-18 18:43 204 查看
《学习OpenCV》中文版第4章第2题

题目要求:

点击图片是获取该点的颜色值,并在图像上点击鼠标处用文本将颜色值显示出来。

程序代码:

#include "stdafx.h"
#include <cv.h>
#include <highgui.h>
using namespace std;
using namespace cv;

void MouseCallBack(int event, int x, int y, int flags, void *param);

int _tmain(int argc, _TCHAR* argv[])
{
const char * fileName = "D:\\Work\\Work_Programming\\Source\\Image\\lena.jpg";
cvNamedWindow("MouseEvent", CV_WINDOW_AUTOSIZE);
IplImage * img = cvLoadImage(fileName,1);
assert(img);

cvSetMouseCallback("MouseEvent", MouseCallBack, img);

while (true)
{
cvShowImage("MouseEvent", img);

if (waitKey(15) == 27)
{
break;
}
}

cvWaitKey(0);

cvReleaseImage(&img);
cvDestroyWindow("MouseEvent");

//system("pause");

return 0;
}

void MouseCallBack(int event, int x, int y, int flags, void *param)
{
IplImage * img = (IplImage *)param;

CvFont font;
cvInitFont(&font, CV_FONT_HERSHEY_SIMPLEX, 0.5, 0.5, 0, 2, 8);

CvScalar scl;
char * str = (char *)malloc(30 * sizeof(char));

if (event == CV_EVENT_LBUTTONDOWN)
{
scl = cvGet2D(img, x, y);

double b = scl.val[0];
double g = scl.val[1];
double r = scl.val[2];

sprintf(str, "B:%.0f,G:%.0f,R:%.0f", b, g, r);

cvPutText(img, str, cvPoint(x, y), &font, cvScalar(255, 0, 0));
}

free(str);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐