[OpenCV3]显示鼠标点击处的BRG值
问题描述:
当鼠标点击图像时,读取鼠标对应位置的像素值(BGR),并且以文本的形式在鼠标在屏幕中所在的位置显示出来。
问题分析:
将任务进行分解,
1、 知道鼠标在图像上的位置。
2、 返回图像对应位置的像素值。
3、 文本显示。
主要函数:
1、OpenCV的鼠标事件在回调函数中有一个参数值有关鼠标的当前位置。
回调函数的接口协议:
Void your_mouse_callback(
int event; //鼠标事件类型
int x, //鼠标事件的x坐标
int y, //鼠标事件的y坐标
int flag;
void* param
);
2、Mat类型的图像返回(x,y)处对应的BGR值可以用:
B: img.at(x, y)[0]
G: img.at(x, y)[1]
R: img.at(x, y)[2]
3.文本显示的函数:cv::putText()(省略了函数的参数)
解答:
//任务要求:读取一张照片,并在用户点击图片时,读取当前鼠标对应的位置像素值
//并且以文本的形式在鼠标在屏幕中的位置显示出来。#include using namespace cv;void my_mouse_callback(int event, int x, int y, int flags, void* param
);void help()
{std::cout<< "显示鼠标点击处的BGR值." << std::endl;
}int B, G, R;
String s;int main()
{help();Mat img, temp;img = imread("C:/Users/limimi/Desktop/learning/OpenCV/Learning-OpenCV-3_examples-master/fruits.jpg");img.copyTo(temp);namedWindow("fruit", CV_WINDOW_AUTOSIZE);while (1){setMouseCallback("fruit", my_mouse_callback, (void*)&temp);imshow("fruit", temp);if ((waitKey(10) ==83)|| (waitKey(10) == 115))//按下s键刷新图像,83,115分别为s,S的ASCII码{img.copyTo(temp);};if (waitKey(15) == 27) break;}return 0;
}//鼠标的callback定义void my_mouse_callback(int event, int x, int y, int flags, void* param)
{Mat& img = *(Mat*)param;switch (event){case EVENT_LBUTTONDOWN:{B = img.at<Vec3b>(x, y)[0];G = img.at<Vec3b>(x, y)[1];R = img.at<Vec3b>(x, y)[2];s = "B:"+std::to_string(B)+ "G:" + std::to_string(G)+"R:" + std::to_string(R);}break;case CV_EVENT_LBUTTONUP:{putText(img, s, Point(x, y), FONT_HERSHEY_DUPLEX ,0.5, Scalar(0, 0, 0));}break;}
}
效果展示:

本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
