21xrx.com
2024-05-20 07:05:22 Monday
登录
文章检索 我的文章 写文章
C++中使用OpenCV进行图像框选的方法
2023-07-06 20:54:53 深夜i     --     --
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进行图像框选,可以实现很多图像处理和计算机视觉的应用。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复