使用C++ opencv创建小视口

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,并显示该小视口;当释放鼠标左键时,停止拖动。

相关推荐

  1. 使用C++ opencv创建小视

    2024-04-01 18:38:02       37 阅读
  2. linux环境下创建聚合实例

    2024-04-01 18:38:02       32 阅读
  3. Mybatis-Plus使用小记

    2024-04-01 18:38:02       63 阅读
  4. Linux 使用小记

    2024-04-01 18:38:02       65 阅读
  5. Dynamo 使用小结

    2024-04-01 18:38:02       49 阅读
  6. flink-cdc使用小结

    2024-04-01 18:38:02       52 阅读
  7. HCSC单片机使用小结

    2024-04-01 18:38:02       41 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-04-01 18:38:02       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-04-01 18:38:02       100 阅读
  3. 在Django里面运行非项目文件

    2024-04-01 18:38:02       82 阅读
  4. Python语言-面向对象

    2024-04-01 18:38:02       91 阅读

热门阅读

  1. redis 常用命令

    2024-04-01 18:38:02       36 阅读
  2. docker run 使用 -p 命令一直显示端口被占用

    2024-04-01 18:38:02       37 阅读
  3. git 更改仓库地址

    2024-04-01 18:38:02       42 阅读
  4. 2024.2.6力扣每日一题——魔塔游戏

    2024-04-01 18:38:02       43 阅读
  5. Python 树结构库treelib使用教程

    2024-04-01 18:38:02       41 阅读
  6. npm常用命令详解

    2024-04-01 18:38:02       37 阅读
  7. 蓝桥杯备考随手记: practise03

    2024-04-01 18:38:02       38 阅读
  8. git - - - 克隆仓库时输入指定账号和密码

    2024-04-01 18:38:02       32 阅读
  9. Profile Recovery

    2024-04-01 18:38:02       41 阅读
  10. 安装pygimli

    2024-04-01 18:38:02       38 阅读