利用opencv,在图像中获取鼠标按下时坐标和灰度值

来源:互联网 发布:ledv3.zh3软件下载 编辑:程序博客网 时间:2024/06/04 19:12

很多都是opencv1的代码,这里特意写一个opencv2的。

为了方便获取图片指定点的灰度值,找出图片之间的共同特性,特意外写了这个代码:

void on_mouse(int event, int x, int y, int flags, void* prarm){Mat& pic1 = *(Mat*)prarm;Mat pic2 = pic1.clone();int cha = pic1.channels();char label[20];char label2[20];if (event == CV_EVENT_LBUTTONDOWN){uchar* ptr = (uchar*)pic1.data + y * pic1.cols; //获取指定点的像素值
sprintf(label, "gray value: %d", ptr[x]);sprintf(label2, "pixel: (%d,%d)", x, y);
if (pic1.cols - x <= 180 || pic1.rows - y <= 20){cv::rectangle(pic2, cvPoint(x - 180, y - 40), cvPoint(x - 10, y - 10), CV_RGB(0, 0, 0));cv::putText(pic2, label, cvPoint(x - 180, y - 30), CV_FONT_HERSHEY_SIMPLEX, 1,Scalar(0, 0, 255),2,8);cv::putText(pic2, label2, cvPoint(x - 180, y - 10), CV_FONT_HERSHEY_SIMPLEX,1,Scalar(0, 0, 255),2,8);}else{cv::rectangle(pic2, cvPoint(x + 10, y - 12), cvPoint(x + 180, y + 20), CV_RGB(0, 0, 0));cv::putText(pic2, label, cvPoint(x + 10, y), CV_FONT_HERSHEY_SIMPLEX,1, Scalar(0, 0, 255),2,8);cv::putText(pic2, label2, cvPoint(x + 10, y + 20),CV_FONT_HERSHEY_SIMPLEX,1, Scalar(0, 0, 255),2,8);}CvPoint centerPoint;centerPoint.x = x;centerPoint.y = y;cv::circle(pic2, centerPoint, 3, Scalar(0, 0, 0), 1, 8, 3);cv::imshow("pic", pic2);   //绘制以鼠标坐标为圆心的圆}}int _tmain(int argc, _TCHAR* argv[]){string filename = R"(C:\Users\Administrator\Desktop\微信图片_20170726101932.jpg)";Mat pic = imread(filename,CV_LOAD_IMAGE_UNCHANGED);namedWindow("pic",CV_WINDOW_NORMAL);cvSetMouseCallback("pic",on_mouse,(void*)&pic);cv::imshow("pic",pic);waitKey();return 0;}