21xrx.com
2024-11-08 22:00:43 Friday
登录
文章检索 我的文章 写文章
C++中的minarearect提取方法
2023-07-11 15:53:22 深夜i     --     --
C++ minarearect 提取方法 图像处理 OpenCV

在C++编程中,minarearect是一个非常有用的函数,其可以帮助我们提取图形的最小矩形区域。在计算机视觉和图像处理中,该函数被广泛应用于提取物体区域或识别物体形状。那么,在C++中,如何使用minarearect进行图形提取呢?

首先,我们需要明确一个概念,minarearect实际上是Opencv库中的一个函数,因此我们需要先安装Opencv库。在安装完毕后,我们可以使用如下代码进行包含:


#include <opencv2/opencv.hpp>

接着,我们需要利用Opencv库中的contourArea函数来计算轮廓面积。当得到图像的轮廓面积后,我们可以使用minarearect函数进行物体提取或形状识别。

下面是一段示例代码:


#include <iostream>

#include <opencv2/opencv.hpp>

using namespace cv;

using namespace std;

int main()

{

  // 读取图像

  Mat src = imread("test.jpg");

  // 转换为灰度图像

  Mat gray;

  cvtColor(src, gray, COLOR_BGR2GRAY);

  // 二值化

  Mat binary;

  threshold(gray, binary, 0, 255, THRESH_BINARY_INV | THRESH_OTSU);

  // 轮廓发现

  vector<vector<Point>> contours;

  vector<Vec4i> hierarchy;

  findContours(binary, contours, hierarchy, RETR_TREE, CHAIN_APPROX_SIMPLE);

  // 遍历轮廓

  for (int i = 0; i < contours.size(); i++)

  {

    // 计算轮廓面积

    double area = contourArea(contours[i]);

    // 计算最小矩形区域,实际上是建立一个旋转矩形,将矩形区域框住。

    RotatedRect rect = minAreaRect(contours[i]);

    // 输出结果

    cout << "Contour " << i << " area: " << area << endl;

    cout << "Min Area Rect " << i << " points: " << rect.points() << endl;

  }

  return 0;

}

代码中,我们首先读取待处理的图像,然后将其转换为灰度图像,并进行二值化处理。接着,我们使用findContours函数检测图像中的边缘轮廓。然后,我们使用循环遍历每个轮廓,计算轮廓面积并使用minarearect函数计算对应的旋转矩形。最后,我们将结果输出到控制台。

需要注意的是,得到的旋转矩形的四个顶点坐标可能是浮点型,需要进行类型转换或四舍五入操作。此外,在使用minarearect函数时,需要将轮廓点集中的坐标转换为Point2f类型。

总结来说,利用C++中的minarearect函数进行图形提取的方法如下:

1. 导入Opencv库,包含头文件。

2. 转换图像为灰度图像并二值化。

3. 检测图像中的轮廓,并遍历每个轮廓。

4. 计算轮廓面积和旋转矩形区域。

5. 输出结果。

通过上述步骤,我们就可以轻松地在C++编程中使用minarearect函数进行图形提取和形状识别。

  
  

评论区

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