2013-10-02 62 views
4
#include <iostream> 
#include <stdio.h> 
#include <opencv2/opencv.hpp> 
#include <highgui.h> 

using namespace cv; 
using namespace std; 

Mat image; 
char window_name[20]="Get coordinates"; 

static void onMouse(int event, int x, int y, int f, void*){ 
    cout << x << " " << y << endl; 
    //putText(image, "point", Point(x,y), CV_FONT_HERSHEY_PLAIN, 1.0, CV_RGB(255,0,0)); 
} 

int main() { 
    namedWindow(window_name, CV_WINDOW_AUTOSIZE); 
    image = imread("image.png"); 
    imshow(window_name, image);  
    setMouseCallback(window_name, onMouse, 0); 
    waitKey(0); 
    return 0; 
} 

這是在控制檯上打印鼠標指針的座標值並將鼠標指針懸停在圖像上的代碼。如果我希望在圖像上同樣打印座標,我該怎麼做?使用OpenCV在圖像上懸停時在圖像上打印鼠標指針的像素座標

回答

6
#include <opencv2/imgproc/imgproc.hpp> 
#include <opencv2/highgui/highgui.hpp> 
#include <stdio.h> 

using namespace cv; 

Mat img; 

void onMouse(int event, int x, int y, int flags, void* param) 
{ 
    char text[100]; 
    Mat img2, img3; 

    img2 = img.clone(); 

    if (event == CV_EVENT_LBUTTONDOWN) 
    { 
     Vec3b p = img2.at<Vec3b>(y,x); 
     sprintf(text, "R=%d, G=%d, B=%d", p[2], p[1], p[0]); 
    } 
    else if (event == CV_EVENT_RBUTTONDOWN) 
    { 
     cvtColor(img, img3, CV_BGR2HSV); 
     Vec3b p = img3.at<Vec3b>(y,x); 
     sprintf(text, "H=%d, S=%d, V=%d", p[0], p[1], p[2]); 
    } 
    else 
     sprintf(text, "x=%d, y=%d", x, y); 

    putText(img2, text, Point(5,15), FONT_HERSHEY_PLAIN, 1.0, CV_RGB(0,255,0)); 
    imshow("image", img2); 
} 

int main(int argc, char** argv) 
{ 
    img = imread(argc == 2 ? argv[1] : "lena.jpg"); 
    if (img.empty()) 
     return -1; 

    namedWindow("image"); 
    setMouseCallback("image", onMouse, 0); 
    imshow("image", img); 
    waitKey(0); 

    return 0; 
} 

應當做好的工作..

+0

太好了!拯救了我的一天! –