opencv roi
时间: 2023-11-07 17:04:13 浏览: 113
OpenCV中的ROI(Region of Interest)指的是在图像中选择感兴趣的区域进行操作。在OpenCV中,可以使用不同的方法来实现ROI的提取。
方法1:
使用矩形ROI区域提取。可以通过创建一个矩形区域的对象来指定ROI的位置和大小,然后将该矩形区域应用于源图像,最后得到提取的ROI区域图像。
方法2:
使用轮廓(contour)来指定ROI区域。可以通过定义一个包含多个点的轮廓对象来描述ROI的形状,然后使用drawContours函数将该轮廓应用于掩码图像,最后用掩码图像对源图像进行掩码运算,从而提取ROI区域图像。
方法3:
根据ROI的坐标直接从原图中提取。可以使用矩形的坐标参数来直接指定ROI的位置和大小,然后使用setTo函数将指定区域设置为白色,最后使用掩码运算将ROI区域从源图像中提取出来。
以下是使用OpenCV实现ROI提取的示例代码:
方法1:
```cpp
Mat src, dst;
Rect roiRect(80, 80, 200, 200); // 创建矩形ROI区域
src = imread("D:/opencv练习图片/薛之谦.jpg");
dst = src(roiRect); // 提取ROI区域
imshow("ROI区域", dst);
waitKey(0);
```
方法2:
```cpp
Mat src, dst, ROI;
src = imread("D:/opencv练习图片/薛之谦.jpg");
ROI = Mat::zeros(src.size(), CV_8UC1); // 创建掩码图像
vector<vector<Point>> contours; // 轮廓
vector<Point> pts; // 多边形角点集合
pts.push_back(Point(30, 45));
pts.push_back(Point(100, 15));
pts.push_back(Point(200,145));
pts.push_back(Point(300, 240));
pts.push_back(Point(50, 250));
contours.push_back(pts);
drawContours(ROI, contours, 0, Scalar(255), -1); // 用白色填充多边形区域
src.copyTo(dst, ROI); // 掩码运算
imshow("ROI区域", dst);
imshow("掩码", ROI);
waitKey(0);
```
方法3:
```cpp
Mat src, dst, mask;
Rect roiRect(80, 80, 200, 200); // 创建矩形ROI区域
src = imread("D:/opencv练习图片/薛之谦.jpg");
mask = Mat::zeros(src.size(), CV_8UC1); // 创建纯黑色二值图像
mask(roiRect).setTo(255); // 构建掩膜,将矩形ROI区域涂白
src.copyTo(dst, mask); // 掩膜运算
imshow("ROI区域", dst);
imshow("掩膜", mask);
waitKey(0);
```
阅读全文
相关推荐















