1012327963 发表于 2021-5-16 10:33:01

opencv打开摄像头后左击无法显示像素坐标

如标题所示,我是根据kinect之前的代码去改的
#include <iostream>
#include <opencv2/imgproc/imgproc.hpp>
#include <opencv2/highgui/highgui.hpp>

using namespace std;
using namespace cv;
const char* windows_name = "onMouseCallback";

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

int main(int argc, char* argv[])
{
    //打开一个默认的相机
        VideoCapture capture(0);
        //检查是否成功打开
        if (!capture.isOpened())
        {
                cout << "摄像头无法打开,请检查是否连接正常" << endl;
                return -1;
        }
        Mat frame;
        while (capture.read(frame))
        {
                imshow("video-demo", frame);
                char c = waitKey(66);
                if (c == 27)
                {
                        break;
                }
        }

    namedWindow(windows_name);
    setMouseCallback(windows_name, on_Mouse, (void*)&capture); //类型转换

    waitKey();
    return 0;
}
void on_Mouse(int event, int x, int y, int flags, void* param) {
    Mat depth_img = *(Mat*)param; // 先转换类型,再取数据
    Vec3b depth;    // 初始化不可放在case内

    // 一般包含如下3个事件
    switch (event)
    {
    case EVENT_MOUSEMOVE:
      //cout << "Please select one point:" << endl;
      break;
    case EVENT_LBUTTONDOWN: // 鼠标左键按下
      depth = depth_img.at<Vec3b>(x, y);
      cout << "Position: (" << x << "," << y
            << ")—— depth = " << depth << endl;
      break;
    case EVENT_LBUTTONUP: // 鼠标左键释放
      cout << "buttonup" << endl;
      break;
    }
}

人造人 发表于 2021-5-16 10:33:02

#include <iostream>
#include <opencv2/imgproc/imgproc.hpp>
#include <opencv2/highgui/highgui.hpp>

using namespace std;
using namespace cv;
const char* window_name = "video-demo";

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

int main(int argc, char* argv[])
{
    //打开一个默认的相机
    VideoCapture capture(0);
    //检查是否成功打开
    if (!capture.isOpened())
    {
      cout << "摄像头无法打开,请检查是否连接正常" << endl;
      return -1;
    }

    Mat frame;
    namedWindow(window_name);
    setMouseCallback(window_name, on_Mouse, &frame); //类型转换
    while (capture.read(frame))
    {
      imshow(window_name, frame);
      char c = waitKey(66);
      if (c == 'q')
      {
            break;
      }
    }

    destroyAllWindows();
    waitKey();
    return 0;
}
void on_Mouse(int event, int x, int y, int flags, void *param) {
    Mat *depth_img = (Mat *)param;
    Vec3b depth;    // 初始化不可放在case内

    // 一般包含如下3个事件
    switch (event)
    {
      case EVENT_MOUSEMOVE:
            //cout << "Please select one point:" << endl;
            break;
      case EVENT_LBUTTONDOWN: // 鼠标左键按下
            depth = depth_img->at<Vec3b>(x, y);
            cout << "Position: (" << x << "," << y
                << ")—— depth = " << depth << endl;
            break;
      case EVENT_LBUTTONUP: // 鼠标左键释放
            cout << "buttonup" << endl;
            break;
    }
}
页: [1]
查看完整版本: opencv打开摄像头后左击无法显示像素坐标