OPENCV系列(一) 读取图像中任意点的像素值,并显示坐标
2016-07-30 23:29
543 查看
需求:在鼠标左键按下时,显示该位置的像素值和坐标。
在vs2010下新建了Win32控制台项目,在此只处理灰度图像,显示的像素值为灰度值
注:调整显示位置那部分代码理解为如果鼠标点击的位置太靠近边缘,显示的矩形框会在图片之外,用户无法看到,故设置了检测,如果靠近边缘,就在另一边显示内容。
效果见图:(采用例子为2D点云图)
在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; }
注:调整显示位置那部分代码理解为如果鼠标点击的位置太靠近边缘,显示的矩形框会在图片之外,用户无法看到,故设置了检测,如果靠近边缘,就在另一边显示内容。
效果见图:(采用例子为2D点云图)
相关文章推荐
- opencv 中图像像素的读取与显示
- 使用OpenCV从图像上读取像素坐标位置
- 【OpenCV学习笔记5】读取图像中任意点的像素值
- MFC中用OpenCV显示图像,并跟踪鼠标显示图像的坐标与像素
- 用opencv读取图像的每个像素值,鼠标点击获取每一个点,并显示像素
- 利用OpenCV鼠标事件设置函数setMouseCallback显示图像像素坐标值!
- opencv 图像读取显示和像素操作
- OpenCV应用笔记】(彩色/灰度)图像像素值读取并保存到txt文件
- Qt中用OpenCV2.4读取并把图像显示在QLabel中 (Ubuntu12.04)
- OpenCV中图像的读取与显示
- OpenCV读取摄像头显示原图像和RGB三通道直方图
- 笔记:OpenCV 读取摄像头并显示图像的R、G、B三个通道的直方图
- OpenCV显示图像的方法——否则程序运行好了都不知道图像怎么读取的
- OpenCV中读取RGB格式图像转成HSV格式图像显示
- 初学OpenCV之图像坐标读取函数cvGet2D()
- 学习OpenCV系列文章一:显示图像
- OpenCV的第一个小程序:读取图像并显示
- 【OpenCV应用笔记】(彩色/灰度)图像像素值读取并保存到txt文件
- Opencv读取文件夹连续图片,RGB分量显示,图像灰度化
- 利用MFC和opencv读取视频显示图像方法