21xrx.com
2025-04-09 04:57:36 Wednesday
文章检索 我的文章 写文章
C++中使用OpenCV进行图像框选的方法
2023-07-06 20:54:53 深夜i     67     0
C++ OpenCV 图像框选 方法

OpenCV是一款非常优秀的计算机视觉库,可以用于图像处理、图像分析、计算机视觉等多个领域。如果我们想在C++中使用OpenCV进行图像框选,有两种方法可供选择。

方法一:使用鼠标事件进行框选

这种方法的实现流程是先读入图像,然后通过鼠标事件捕获选框位置信息,最后裁剪图像并进行处理。代码如下:

#include <opencv2/opencv.hpp>
using namespace cv;
Rect box;
bool drawing_box = false;
void draw_box(Mat& img, Rect box)
{
  rectangle(img, box.tl(), box.br(), Scalar(0, 0, 255), 2);
}
void mouse_callback(int event, int x, int y, int flags, void* param)
{
  Mat &image = *(Mat*)param;
  switch (event) {
    case EVENT_MOUSEMOVE: {
      if (drawing_box) {
        box.width = x - box.x;
        box.height = y - box.y;
        image.copyTo(temp_image);
        draw_box(temp_image, box);
      }
      break;
    }
  }
}
int main()
{
  Mat image = imread("your_image_path");
  namedWindow("image");
  setMouseCallback("image", mouse_callback, &image);
  while (true) {
    imshow("image", temp_image);
    if (waitKey(10) == 27)
      break;
  }
  return 0;
}

方法二:使用Rect函数进行框选

这种方法的实现流程与上面一种类似,是先读入图像,然后通过Rect函数指定选框位置信息,最后裁剪图像并进行处理。代码如下:

#include <opencv2/opencv.hpp>
using namespace cv;
int main()
{
  Mat image = imread("your_image_path");
  namedWindow("image");
  Rect box = selectROI("image", image, true, false);
  image = image(box);
  imshow("ROI", image);
  waitKey();
  return 0;
}

这两种方法都可以很好地实现图像的框选,并且可以更加灵活地根据实际需要进行裁剪和处理。使用OpenCV进行图像框选,可以实现很多图像处理和计算机视觉的应用。

  
  

评论区

    相似文章
请求出错了