c++ , opencv, 对图片的指定异形区域置为0或255
时间: 2024-03-11 09:47:49 浏览: 104
opencv c++ 图像处理
对于异形区域的处理,可以使用掩膜(mask)来实现。具体步骤如下:
1. 创建一个与原图像大小相同的掩膜图像:
```
cv::Mat mask(image.size(), CV_8UC1, cv::Scalar(0));
```
2. 在掩膜图像上用白色(255)绘制异形区域:
```
std::vector<cv::Point> points; // 异形区域的顶点坐标
// 将异形区域顶点坐标转换为cv::Point类型
std::vector<cv::Point> cv_points(points.size());
for (int i = 0; i < points.size(); i++) {
cv_points[i] = cv::Point(points[i].x, points[i].y);
}
// 在掩膜图像上绘制异形区域
cv::fillConvexPoly(mask, cv_points.data(), cv_points.size(), cv::Scalar(255));
```
3. 将掩膜应用到原图像上,只保留掩膜中对应的像素:
```
cv::Mat masked_image;
image.copyTo(masked_image, mask);
```
4. 将掩膜中的像素值为0的像素置为0,将像素值为255的像素置为255:
```
for (int i = 0; i < mask.rows; i++) {
for (int j = 0; j < mask.cols; j++) {
if (mask.at<uchar>(i, j) == 0) {
masked_image.at<uchar>(i, j) = 0;
} else {
masked_image.at<uchar>(i, j) = 255;
}
}
}
```
5. 最后,保存修改后的图像:
```
cv::imwrite("modified_image.jpg", masked_image);
```
阅读全文