原文只获取了彩色图像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;
}