OpenCV 中讀取一張圖片的像素點,並顯示

1、讀入並顯示一張圖像。當用戶點擊鼠標圖像時,獲取圖像對應像素的(BGR),並在圖像上點擊鼠標處用文本將顏色值顯示出來。

#include <iostream>
#include <opencv2/opencv.hpp>
#include <opencv2/highgui.hpp>
#include <opencv2/core/core.hpp>
#include <stdio.h>
#include <cstdlib>

using namespace std;
using namespace cv;

void my_mouse_callback(int event,int x, int y, int flags, void *param);

CvPoint st_point;
int blue  = 0;
int green = 0;
int red   = 0;
CvFont font;

int main(int argc, const char * argv[]) {
    const char filename[] = "/Users/linwang/Desktop/Lena.png";
    
    IplImage * image = cvLoadImage(filename);
    
    cvInitFont(&font, CV_FONT_HERSHEY_COMPLEX, 1, 1, 0, 2, 8);
    
    cvNamedWindow("Lena");
    
    cvSetMouseCallback("Lena",  my_mouse_callback, (void *)image);
    
    cvShowImage("Lena", image);
    
    cvWaitKey(0);

    cvReleaseImage(&image);
    
    cvDestroyWindow("Lena");
}

void my_mouse_callback(int event,int x,int y,int flags,void *param)
{
    IplImage * image = (IplImage *)param;
    
    switch (event) {
            /*鼠標離開*/
        case CV_EVENT_LBUTTONDOWN:
            {
                /*鼠標左鍵點擊事件,記錄點擊的(x,y)*/
                st_point.x = x;
                st_point.y = y;
                cout<<"按下左鍵 : "<<" x = "<<x <<" y "<<y<<endl;
                break;
            }
        case CV_EVENT_LBUTTONUP:
            {
                /*鼠標左鍵放開事件,讀取當前點的像素值BGR*/
                unsigned char * ptr = (uchar *)(image->imageData + st_point.x * image->widthStep);
                blue  = (int)(*(ptr + st_point.y));
                green = (int)(*(ptr + st_point.y + 1));
                red   = (int)(*(ptr + st_point.y + 2));
                cout<<"擡起左鍵 : "<<" blue= "<<blue<<" green = "<<green<<" red =  "<<red<<endl;
                char text[20] = "0";
                sprintf(text,"(%d,%d,%d)",blue,green,red);
                cout<<"Text = "<<text<<endl;
                cvPutText(image, text, st_point, &font, CV_RGB(0,0,0));
                cvShowImage("Lena", image);
                break;
            }
        default:
            break;
    }
}




發佈了177 篇原創文章 · 獲贊 13 · 訪問量 13萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章