c++ - 使用 OpenCV 在图像上悬停时打印鼠标指针的像素坐标

标签 c++ opencv

#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;
}

这是打印鼠标指针坐标值的代码,同时悬停在图像上,在控制台上。如果我想在图像上打印类似的坐标,我应该怎么做?

最佳答案

#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;
}

应该做的工作..

关于c++ - 使用 OpenCV 在图像上悬停时打印鼠标指针的像素坐标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19136474/

相关文章:

c++ - 避免循环依赖——需要相互牵制

c++ - 有没有办法传递函数模板作为另一个函数中的参数?

c++ - 三角形的内外检验

ruby-on-rails - 安装 ruby​​-opencv (0.0.14) 时出错

python - 图像的随机翻转和RGB抖动/轻微值变化?

opencv - cv.contourArea(contour,True)何时返回负值?

c++ - libc++ std::search_n 中的崩溃是一个错误吗?

c++ -/MTd 会触发断点但/MDd 不会

c++ - 调用 cv::stereoBM 构造函数时出错

c++ - Triclops Stereo API 可以用来处理离线图像吗?