点击图像获取RGB

直接代码:

/*===============================================//
功能:OpenCV Utility: Reading Image Pixels Value
时间:4/4/2011 SkySeraph HQU
//===============================================*/
#include "iostream"
#include "math.h"
#include "cv.h"
#include "highgui.h"
using namespace std;


/*=============================================*/
void mouseHandler(int event, int x, int y, int flags, void* param)
{
    IplImage* img0, * img1;    
    img0 = (IplImage*) param;
    img1 = cvCloneImage(img0);
    /*-------------cvInitFont-------------------//
    //功能:初始化字体结构体
    //原型:void cvInitFont( 
        CvFont* font, //被初始化的字体结构体
        int font_face,//字体名称标识符
            $ CV_FONT_HERSHEY_SIMPLEX - 正常大小无衬线字体。 
            $ CV_FONT_HERSHEY_PLAIN - 小号无衬线字体。 
            $ CV_FONT_HERSHEY_DUPLEX - 正常大小无衬线字体。( 比CV_FONT_HERSHEY_SIMPLEX更复杂) 
            $ CV_FONT_HERSHEY_COMPLEX - 正常大小有衬线字体。 
            $ CV_FONT_HERSHEY_TRIPLEX - 正常大小有衬线字体 ( 比CV_FONT_HERSHEY_COMPLEX更复杂) 
            $ CV_FONT_HERSHEY_COMPLEX_SMALL - CV_FONT_HERSHEY_COMPLEX 的小译本。 
            $ CV_FONT_HERSHEY_SCRIPT_SIMPLEX - 手写风格字体。 
            $ CV_FONT_HERSHEY_SCRIPT_COMPLEX - 比CV_FONT_HERSHEY_SCRIPT_SIMPLEX更复杂。
            //这个参数能够由一个值和可选择的CV_FONT_ITALIC字体标记合成,就是斜体字
        double hscale,//字体宽度。
            //如果等于1.0f,字符的宽度是最初的字体宽度。如果等于0.5f,字符的宽度是最初的字体宽度的一半
        double vscale,//字体高度。
        double shear=0,//字体的斜度。
            //当值为0时 ,字符不倾斜;当值为1.0f时,字体倾斜≈45度,等等。厚度让字母着重显示。函数cvLine用于绘制字母
        int thickness=1, //字体笔划的粗细程度
        int line_type=8 //字体笔划的类型
        );
    //--------------------------------------------*/
    CvFont font;
    uchar* ptr;
    char label[20];
    cvInitFont(&font, CV_FONT_HERSHEY_PLAIN, .8, .8, 0, 1, 8);
    if (event == CV_EVENT_LBUTTONDOWN) //单击左键
    {
        /* read pixel */
        ptr = cvPtr2D(img1, y, x, NULL);//返回指向特殊数组元素的指针 && cvGet2D返回指向特殊数组的元素
        /*display the BGR value*/
        sprintf(label, "(%d, %d, %d)", ptr[0], ptr[1], ptr[2]);
        cvRectangle(
            img1,
            cvPoint(x, y - 12),
            cvPoint(x + 100, y + 4),
            CV_RGB(255, 0, 0),
            CV_FILLED, 
            8, 0
            );
        cvPutText(
            img1,
            label,
            cvPoint(x, y),
            &font,
            CV_RGB(255, 255, 0)
            );
        cvShowImage("img", img1);
    }
}

int main()
{
    IplImage* img= cvLoadImage("F:\\灾后分类图.jpg",1);
    assert(img);
    /* create a window and install mouse handler */
    cvNamedWindow("img", 1);
    //  注册鼠标事件
    cvSetMouseCallback("img", mouseHandler, (void*)img);
    cvShowImage("img", img);
    cvWaitKey(0);
    /* be tidy */
    cvDestroyAllWindows();
    cvReleaseImage(&img);
    return 0;
}

 

 

posted @ 2012-03-19 17:21  hailong  阅读(1543)  评论(0编辑  收藏  举报