c++提取图片ROI区域,其中ROI区域为圆形,代码实现
时间: 2024-03-01 19:54:16 浏览: 89
C++在MFC中使用OpenCV动态绘制图像ROI区域(矩形+多边形)
提取圆形 ROI 区域的方法可以先提取圆形的外接矩形,然后再提取矩形区域内的圆形区域。以下是使用 OpenCV 库提取圆形 ROI 区域的 C++ 代码示例:
```cpp
#include <opencv2/opencv.hpp>
int main()
{
// 加载图片
cv::Mat img = cv::imread("image.jpg");
// 定义圆形 ROI 区域
cv::Point center(100, 100); // 圆心坐标
int radius = 50; // 半径
// 提取圆形外接矩形
cv::Rect rect(center.x - radius, center.y - radius, radius * 2, radius * 2);
// 提取圆形 ROI 区域
cv::Mat roiImg = cv::Mat::zeros(img.size(), CV_8UC3); // 创建一个全黑的 Mat
cv::Mat mask = cv::Mat::zeros(img.size(), CV_8UC1); // 创建一个全黑的掩膜
cv::circle(mask, center, radius, cv::Scalar(255, 255, 255), -1); // 在掩膜上画圆
img.copyTo(roiImg, mask); // 复制原始图片到全黑的 Mat 上,并只保留掩膜中的圆形区域
// 显示原始图片和 ROI 区域
cv::imshow("Original", img);
cv::imshow("ROI", roiImg);
cv::waitKey(0);
return 0;
}
```
上述代码中,首先定义圆心坐标和半径,然后提取圆形外接矩形。接着创建一个全黑的 Mat 对象 `roiImg` 和一个全黑的掩膜 `mask`,并在掩膜上画一个圆形。最后使用 `cv::copyTo()` 函数将原始图片复制到全黑的 Mat 上,并只保留掩膜中的圆形区域。
阅读全文