一个基于opencv的显示一个rgb图像各点灰度值及对应的灰度图象灰度值的程序
2011-11-01 06:50
701 查看
运行时使用鼠标左键点图像上任意点,即可显示该点rgb图像各通道的值及该图像对应的灰度图象的灰度值
//PixelValueMonitor.h #include "cv.h" #include "highgui.h" class PixelValueMonitor{ public: PixelValueMonitor(IplImage* img); ~PixelValueMonitor(); static void mouse_callback(int trigerEvent,int x,int y,int flags,void* param); void run(); IplImage* m_img; IplImage* m_grayImage; char* m_windowName; bool m_destroyWindow; };
//PixelValueMonitor.cpp #include "PixelValueMonitor.h" PixelValueMonitor::PixelValueMonitor(IplImage *img){ m_img=cvCreateImage(cvSize(img->width,img->height),img->depth,img->nChannels); cvCopy(img,m_img); m_grayImage=cvCreateImage(cvSize(img->width,img->height),IPL_DEPTH_8U,1); cvCvtColor(m_img,m_grayImage,CV_RGB2GRAY); m_windowName="window for pixel monitoring"; m_destroyWindow=false; } PixelValueMonitor::~PixelValueMonitor(){ cvReleaseImage(&m_img); cvReleaseImage(&m_grayImage); } void PixelValueMonitor::mouse_callback(int trigerEvent, int x, int y, int flags, void *param){ PixelValueMonitor* instance=(PixelValueMonitor*)param; if(trigerEvent==CV_EVENT_LBUTTONDOWN){ unsigned char* ptrRGB=(unsigned char*)(instance->m_img->imageData+y*instance->m_img->widthStep); unsigned char* ptrGray=(unsigned char*)(instance->m_grayImage->imageData+y*instance->m_grayImage->widthStep); //printf("x:\t%d\ny:\t%d\n",x,y); printf("R:\t%d\n",*(ptrRGB+3*x+2)); printf("G:\t%d\n",*(ptrRGB+3*x+1)); printf("B:\t%d\n",*(ptrRGB+3*x)); printf("GRAY:\t%d\n",*(ptrGray+x)); } else if(trigerEvent==CV_EVENT_RBUTTONDOWN){ instance->m_destroyWindow=true; } } void PixelValueMonitor::run(){ cvNamedWindow(m_windowName); cvSetMouseCallback(m_windowName,mouse_callback,(void*)this); cvShowImage(m_windowName,m_img); while(1){ if(cvWaitKey(2)==27 || m_destroyWindow) break; } cvDestroyWindow(m_windowName); }
//main.cpp #include "PixelValueMonitor.h" #include "cv.h" #include "highgui.h" int main(int argc,char** argv){ IplImage* img=cvLoadImage("data/videoImage.jpg",1); /*IplImage* img=cvCreateImage(cvSize(800,600),IPL_DEPTH_8U,3); cvSet(img,cvScalar(255,255,255));*/ PixelValueMonitor monitor(img); monitor.run(); return 0; }
相关文章推荐
- OpenCV 2 学习笔记(3): 一个简单的opencv程序:在Console上显示图像
- 【opencv学习笔记五】一个简单程序:图像读取与显示
- 一个简单的显示图像程序(OpenCV)
- OpenCV开发环境搭建-并测试一个图像灰度处理程序
- Study notes for OpenCV——第三节:Opencv一个简单的程序:显示图像
- OpenCV编程案例:实现一个双目摄像头图像显示的程序
- document-scanner 一个基于 OpenCV 的文档扫描程序(从现在开始直到完成)
- 转:MFC 基于对话的程序界面显示完全后立即执行一个函数
- opencv程序一:加载显示图像
- OpenCV中读取RGB格式图像转成HSV格式图像显示
- opencv第一个显示图像的小程序
- OpenCV读取摄像头显示原图像和RGB三通道直方图
- OpenCV的第一个小程序:读取图像并显示
- opencv加载并显示图像程序
- [OPENCV learning] 获取图像的灰度和一维RGB彩色直方图
- 创建一个基于ViSP的图片显示程序
- 基于OpenCV3实现一个窗口显示若干张图片
- 基于openCV图像的矩的程序笔记
- 灰度值为50对应的图像RGB计算
- OpenCV中一个窗口显示两幅图像