0
点赞
收藏
分享

微信扫一扫

分享react+three.js展示温湿度采集终端

何晓杰Dev 04-01 19:00 阅读 1
opencvc++

1、创建固定位置小视口

#include <opencv2/opencv.hpp>

bool isDragging = false;
cv::Point startPt;

void onMouse(int event, int x, int y, int flags, void* userdata) {
    if (event == cv::EVENT_LBUTTONDOWN) {
        isDragging = true;
        startPt = cv::Point(x, y);
    } else if (event == cv::EVENT_MOUSEMOVE && isDragging) {
        cv::Mat* image = static_cast<cv::Mat*>(userdata);
        cv::Rect roi(startPt, cv::Point(x, y));
        cv::Mat subwindow = (*image)(roi);
        cv::imshow("Subwindow", subwindow);
    } else if (event == cv::EVENT_LBUTTONUP) {
        isDragging = false;
    }
}

int main() {
    // 读取图像
    cv::Mat image = cv::imread("path/to/your/image.jpg");

    // 显示原始图像
    cv::imshow("Original Image", image);

    // 设置鼠标回调函数
    cv::setMouseCallback("Original Image", onMouse, &image);

    // 等待按键
    cv::waitKey(0);

    return 0;
}

2、结合鼠标事件,创建可移动视口

#include <opencv2/opencv.hpp>

bool isDragging = false;
cv::Point startPt;

void onMouse(int event, int x, int y, int flags, void* userdata) {
    if (event == cv::EVENT_LBUTTONDOWN) {
        isDragging = true;
        startPt = cv::Point(x, y);
    } else if (event == cv::EVENT_MOUSEMOVE && isDragging) {
        cv::Mat* image = static_cast<cv::Mat*>(userdata);
        cv::Rect roi(startPt, cv::Point(x, y));
        cv::Mat subwindow = (*image)(roi);
        cv::imshow("Subwindow", subwindow);
    } else if (event == cv::EVENT_LBUTTONUP) {
        isDragging = false;
    }
}

int main() {
    // 读取图像
    cv::Mat image = cv::imread("path/to/your/image.jpg");

    // 显示原始图像
    cv::imshow("Original Image", image);

    // 设置鼠标回调函数
    cv::setMouseCallback("Original Image", onMouse, &image);

    // 等待按键
    cv::waitKey(0);

    return 0;
}

定义了一个全局变量 isDragging 来表示是否正在拖动视口,以及 startPt 来记录拖动的起始位置。我们还定义了一个鼠标事件回调函数 onMouse,在这个函数中处理鼠标的点击、移动和释放事件。当用户按下鼠标左键时,我们记录起始点;当鼠标移动且正在拖动时,根据起始点和当前位置计算出小视口的 ROI,并显示该小视口;当释放鼠标左键时,停止拖动。
举报

相关推荐

0 条评论