当鼠标点击图像时,显示对应位置像素的颜色值(BGR):
#include<opencv2\opencv.hpp>
using namespace cv;
using namespace std;
void on_mouse(int event, int x, int y, int flags, void* param);
int main()
{
IplImage* src = cvLoadImage("F:\\happy研\\新建文件夹\\5.jpg");
cvNamedWindow("mouse_image");
cvSetMouseCallback("mouse_image", on_mouse, (void*)src);
cvShowImage("mouse_image", src);
cvWaitKey(0);
cvDestroyWindow("mouse_image");
cvReleaseImage(&src);
return 0;
}
void on_mouse(int event, int x, int y, int flags, void* param)
{
IplImage* src = (IplImage*)param;
//终于明白这里为什么要克隆一份图片了,如果在原图上操作,那么之前的像素坐标都会保留在图片上!
IplImage* img = cvCloneImage(src);
uchar* ptr = NULL;
//注意这里定义的label是一个数组
char label[20];
CvFont font;
cvInitFont(&font,CV_FONT_HERSHEY_PLAIN, .8, .8);
if (event == CV_EVENT_LBUTTONDOWN)
{
//注意cvGet2D与cvPtr2D的区别
ptr = cvPtr2D(img, y, x);
sprintf(label, "(%d,%d,%d)", ptr[0], ptr[1], ptr[2]);
cvRectangle(img, cvPoint(x, y - 12), cvPoint(x + 100, y + 4), CV_RGB(255, 0, 0), CV_FILLED);
cvPutText(img, label, cvPoint(x, y), &font, CV_RGB(255, 255, 0));
cvShowImage("mouse_image", img);
}
}