有没有一种简单的方法可以查看图像每个点的强度?
Is there a simple way to see the intensity of each point of an image?
我正在对一批图像(超过一百张)使用阈值。如果我可以通过在灰色图像上单击鼠标来查看每个点的强度,这将是为所有图像找到合适阈值的一种非常奇妙且简单的方法。但是我是 OpenCV 的新手,不知道该怎么做。有人可以指导我或提供现有代码吗?
您可以使用 setMouseCallback
函数(参见 opencv doc)将回调设置为 imshow window,这将为您提供点击事件的坐标。
void onClickCallback(int event, int x, int y, int, void*);
int main(int argc, char **argv) {
Mat image = imread("/home/zda/0.png", CV_LOAD_IMAGE_COLOR);
namedWindow("image");
setMouseCallback( "image", onClickCallback, &image);
imshow("image",image);
while ('q' != waitKey(0));
}
void onClickCallback( int event, int x, int y, int, void *image) {
if(event == CV_EVENT_LBUTTONDOWN) {
std::cout << "value at (" << x << ", " << y << ") is " << ((Mat*)image)->at<Vec3b>(y, x) << endl;
//This one for grayscale
//std::cout << "value at (" << x << ", " << y << ") is " << (int)((Mat*)image)->at<uchar>(y, x) << endl;
}
}
我正在对一批图像(超过一百张)使用阈值。如果我可以通过在灰色图像上单击鼠标来查看每个点的强度,这将是为所有图像找到合适阈值的一种非常奇妙且简单的方法。但是我是 OpenCV 的新手,不知道该怎么做。有人可以指导我或提供现有代码吗?
您可以使用 setMouseCallback
函数(参见 opencv doc)将回调设置为 imshow window,这将为您提供点击事件的坐标。
void onClickCallback(int event, int x, int y, int, void*);
int main(int argc, char **argv) {
Mat image = imread("/home/zda/0.png", CV_LOAD_IMAGE_COLOR);
namedWindow("image");
setMouseCallback( "image", onClickCallback, &image);
imshow("image",image);
while ('q' != waitKey(0));
}
void onClickCallback( int event, int x, int y, int, void *image) {
if(event == CV_EVENT_LBUTTONDOWN) {
std::cout << "value at (" << x << ", " << y << ") is " << ((Mat*)image)->at<Vec3b>(y, x) << endl;
//This one for grayscale
//std::cout << "value at (" << x << ", " << y << ") is " << (int)((Mat*)image)->at<uchar>(y, x) << endl;
}
}