您的位置:首页 > 运维架构

opencv利用鼠标获取像素值

2013-12-20 16:07 113 查看
参考:opencv利用鼠标获取像素值

原文只获取了彩色图像rgb值,我小小的改动了一下,使能够自适应获取像素值

#include <stdlib.h>
#include <iostream>
#include <string>

#include <opencv/cv.h>
#include <opencv/highgui.h>
using namespace std;

void mouseHandler(int event, int x,int y ,int flags,void *p){
IplImage *img1;
img1=cvCloneImage((IplImage*)p);
CvFont font;
uchar *ptr;
cvInitFont (&font,CV_FONT_HERSHEY_PLAIN,0.8,0.8,0,1,8);

if ((img1->nChannels == 1)&&(event==CV_EVENT_LBUTTONDOWN)){
char label[50];
ptr=cvPtr2D(img1, y,x,NULL);
sprintf(label, "(%d, %d: %d)", x, y, ptr[0]);
std::cout << label << endl;
cvRectangle(img1, cvPoint(x,y-12),cvPoint(x+100, y+4),
cvScalar(255),CV_FILLED, 8,0);
cvPutText(img1,label,cvPoint(x,y),&font,cvScalar(0) );
cvShowImage("src",img1);
}
else if(event==CV_EVENT_LBUTTONDOWN){
char label[50];
ptr=cvPtr2D(img1, y,x,NULL);
sprintf(label, "(%d, %d: %d, %d, %d)", x, y, ptr[0],ptr[1],ptr[2]);
cout << label <<endl;
cvRectangle(img1, cvPoint(x,y-12),cvPoint(x+150, y+4),
CV_RGB(255,0,0),CV_FILLED, 8,0);
cvPutText(img1,label,cvPoint(x,y),&font,CV_RGB(255,255,255) );
cvShowImage("src",img1);
}
}

int main(){
IplImage *src;
src=cvLoadImage("C:/Users/robot/Desktop/1.jpg",1);
assert(src);
cvNamedWindow("src", 1);
cvSetMouseCallback("src", mouseHandler, (void*)src);
mouseHandler(0,0,0,0,src);
cvShowImage("src",src);
cvWaitKey(0);
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: