版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/jiakeyouwe/article/details/52075922
需求:在鼠标左键按下时,显示该位置的像素值和坐标。
在vs2010下新建了Win32控制台项目,在此只处理灰度图像,显示的像素值为灰度值
#include "iostream"
#include "cv.h"
#include "highgui.h"
#include "math.h"
using namespace std;
void mouseHandler(int event, int x, int y, int flags, void* param)
{
IplImage *img0, *img1;
img0 = (IplImage*)param;
img1 = cvCreateImage(cvSize(img0->width, img0->height), img0->depth, img0->nChannels);
cvCopy(img0, img1, NULL);
CvFont font;
uchar* ptr;
char label[20];
char label2[20];
cvInitFont(&font, CV_FONT_HERSHEY_PLAIN, 1, 1, 0, 1, 1); //初始化字体
if(event == CV_EVENT_LBUTTONDOWN)
{
//读取像素
ptr = cvPtr2D(img0, y, x, NULL);
sprintf(label, "Grey Level:%d", ptr[0]);
sprintf(label2, "Pixel: (%d, %d)", x, y);
//调整显示位置
if(img0->width - x <= 180 || img0->height - y <= 20)
{
cvRectangle(img1, cvPoint(x-180, y-40), cvPoint(x-10, y-10), CV_RGB(255, 0, 0), CV_FILLED, 8, 0);
cvPutText(img1, label, cvPoint(x-180, y-30), &font, CV_RGB(255, 255, 255));
cvPutText(img1, label2, cvPoint(x-180, y-10), &font, CV_RGB(255, 255, 255));
}
else
{
cvRectangle(img1, cvPoint(x+10, y-12), cvPoint(x+180, y+20), CV_RGB(255, 0, 0), CV_FILLED, 8, 0);
cvPutText(img1, label, cvPoint(x+10, y), &font, CV_RGB(255, 255, 255));
cvPutText(img1, label2, cvPoint(x+10, y+20), &font, CV_RGB(255, 255, 255));
}
//以鼠标为中心画点
CvPoint centerPoint;
centerPoint.x = x;
centerPoint.y = y;
cvCircle(img1, centerPoint, 3, CV_RGB(0, 0, 0), 1, 8, 3);
cvShowImage("img", img1);
}
}
int main()
{
int exit = 0;
int c;
IplImage* img;
img = cvLoadImage("点云图.png", 1);
//img = cvLoadImage("hotel201.pgm", 1);
assert(img);
if(img->nChannels != 1) //判断是否为灰度图像,若不是,先转换为灰度图像
{
//转换为灰度图像
IplImage* gray = cvCreateImage(cvGetSize(img), img->depth, 1);
cvCvtColor(img, gray, CV_BGR2GRAY);
}
cvNamedWindow("img", 1);
cvSetMouseCallback("img", mouseHandler, (void*)img);
cvShowImage("img", img);
//检测键盘输入,按Q键退出程序
while(!exit)
{
c = cvWaitKey(0);
switch(c)
{
case 'q':
exit = 1;
break;
default:
continue;
}
}
cvDestroyAllWindows();
cvReleaseImage(&img);
return 0;
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
注:调整显示位置那部分代码理解为如果鼠标点击的位置太靠近边缘,显示的矩形框会在图片之外,用户无法看到,故设置了检测,如果靠近边缘,就在另一边显示内容。
效果见图:(采用例子为2D点云图)
转载自:https://blog.csdn.net/jiakeyouwe/article/details/52075922
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/jiakeyouwe/article/details/52075922
需求:在鼠标左键按下时,显示该位置的像素值和坐标。