zoukankan      html  css  js  c++  java
  • 【OpenCV学习笔记5】读取图像中任意点的像素值

    读取图像中任意点的像素值

    SkySeraph Apr 4th 2011  HQU

    Email:zgzhaobo@gmail.com    QQ:452728574

    Latest Modified Date:Apr 4th 2011 HQU

    一、说明:类似于PS中的功能,鼠标放到图片中的某点即能显示其像素值

    二、源码 

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

    #include
    "math.h"

    #pragma comment(lib,"highgui.lib")
    #pragma comment(lib,"cv.lib")
    #pragma comment(lib,"cvaux.lib")
    #pragma comment(lib,"cxcore.lib")

    // 源图像
    const char* filename = "D:\\My Documents\\My Pictures\\Sample\\lena.bmp";

    // 隐藏Console窗口
    #pragma comment( linker, "/subsystem:\"windows\" /entry:\"mainCRTStartup\"" )


    /*=============================================*/
    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(int argc, char** argv)
    {
    IplImage
    * img;
    /* usage: <prog_name> <image> */
    //if (argc != 2)
    //{
    // printf("Usage: %s <image>\n", argv[0]);
    // return 1;
    //}
    /* load image */
    img
    = cvLoadImage(filename, 1);
    /* always check */
    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;
    }

    三、效果

    

    参考:http://nashruddin.com/OpenCV_Utility_Reading_Image_Pixels_Value 

    

    Author:         SKySeraph

    Email/GTalk: zgzhaobo@gmail.com    QQ:452728574

    From:         http://www.cnblogs.com/skyseraph/

    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,请尊重作者的

  • 相关阅读:
    python开发第二十六天CMDB
    python模块(requests,logging)
    python自动开发之第二十五天
    python自动开发之第二十四天(Django)
    python自动开发之第二十三天(Django)
    python自动开发之第二十二天
    python自动开发之第二十一天
    python自动开发之(ajax)第二十天
    python自动开发之(django)第十九天
    python自动开发之第十八天
  • 原文地址:https://www.cnblogs.com/skyseraph/p/2005025.html
Copyright © 2011-2022 走看看