当前位置: 首页> 科技> 能源 > C++:cv::boundingRect()函数解析

C++:cv::boundingRect()函数解析

时间:2025/7/11 12:18:17来源:https://blog.csdn.net/Ethan_Rich/article/details/140337238 浏览次数:0次

cv::boundingRect() 函数是 OpenCV 库中的一个函数,用于计算并返回一个点集的边界矩形。这个函数特别有用,当你已经找到了一些轮廓(contours)或者任何其他形状的点集,并希望获得一个能够包围这些点的最小矩形时。

函数原型通常如下所示(在 C++ 中):

Rect cv::boundingRect(InputArray points)
  • points:这是一个 InputArray 类型的参数,可以是一个点集,比如一个 std::vector<cv::Point> 或者一个 cv::Mat,其中包含了二维的点坐标。这些点通常来自于轮廓检测函数(如 cv::findContours)的输出。

返回值是一个 cv::Rect 对象,它表示了边界矩形的位置和大小。cv::Rect 是一个简单的结构体,通常包含以下四个成员:

  • x:矩形左上角的 x 坐标。
  • y:矩形左上角的 y 坐标。
  • width:矩形的宽度。
  • height:矩形的高度。

使用示例

假设你已经使用 cv::findContours 函数找到了一些轮廓,并希望为每个轮廓绘制一个边界矩形:

#include <opencv2/opencv.hpp>  int main() {  // 加载图像,转换为灰度图,应用阈值处理以获取二值图像  cv::Mat src = cv::imread("path_to_image.jpg", cv::IMREAD_GRAYSCALE);  cv::Mat binary;  cv::threshold(src, binary, 127, 255, cv::THRESH_BINARY);  // 查找轮廓  std::vector<std::vector<cv::Point>> contours;  cv::findContours(binary, contours, cv::RETR_EXTERNAL, cv::CHAIN_APPROX_SIMPLE);  // 绘制边界矩形  cv::Mat drawing = cv::Mat::zeros(binary.size(), CV_8UC3);  for (size_t i = 0; i < contours.size(); i++) {  cv::Rect rect = cv::boundingRect(contours[i]);  cv::rectangle(drawing, rect, cv::Scalar(0, 255, 0), 2, 8, 0);  }  // 显示结果  cv::imshow("Bounding Rectangles", drawing);  cv::waitKey(0);  return 0;  
}

在这个示例中,我们首先加载一张图像,将其转换为灰度图,并应用阈值处理以获取二值图像。然后,我们使用 cv::findContours 函数查找图像中的轮廓。对于每个找到的轮廓,我们使用 cv::boundingRect 函数计算其边界矩形,并使用 cv::rectangle 函数在另一个图像(drawing)上绘制这些矩形。最后,我们显示这个包含边界矩形的图像。

关键字:C++:cv::boundingRect()函数解析

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: