知识点:
ROI解释:
图像的 ROI(region of interest) 是指图像中感兴趣区域、在 OpenCV 中图像设置图像 ROI 区域,实现只对 ROI 区域的操作。
提取不规则ROI区域的一般步骤:
1、通过inRange函数生成mask
2、通过与操作提取ROI
#ifndef DAY16
#define DAY16
#include <opencv2/opencv.hpp>
#include <iostream>
using namespace std;
using namespace cv;
void day16() {
Mat src = imread("G://opencvTest//scene.jpg");
namedWindow("input", WINDOW_AUTOSIZE);
imshow("input", src);
int h = src.rows;
int w = src.cols;
// 获取ROI
int cy = h / 2;
int cx = w / 2;
Rect rect(cx - 100, cy - 100, 200, 200);
Mat roi = src(rect);
imshow("roi", roi);
Mat image = roi.clone();
// 直接更改ROI,因为是直接赋值的,指向同一块内存区域,所以原图也会被修改
roi.setTo(Scalar(255, 0, 0));
imshow("result", src);
// 更改拷贝的ROI,指向不同的内存区域,所以原图不受影响
image.setTo(Scalar(0, 0, 255));
imshow("result2", src);
imshow("copy roi", image);
// 获取不规则形状的ROI,通过inRange函数
Mat src2 = imread("G://opencvTest//tinygreen.jpg");
imshow("src2", src2);
Mat hsv, mask;
cvtColor(src2, hsv, COLOR_BGR2HSV);
inRange(hsv, Scalar(35, 43, 46), Scalar(77, 255, 255), mask);
imshow("mask", mask);
// 通过mask提取人物部分,即我们的ROI。mask的白色区域才会执行与操作,黑色区域不执行
Mat person;
bitwise_not(mask, mask);
bitwise_and(src2, src2, person, mask);
imshow("person", person);
// 生成一张蓝色背景
Mat result = Mat::zeros(src2.size(), src2.type());
result.setTo(Scalar(255, 0, 0));
// 将蓝色背景与ROI融合
Mat dst;
bitwise_not(mask, mask);
bitwise_or(result, result, dst, mask);
add(dst, person, dst);
imshow("dst", dst);
waitKey();
}
#endif // !DAY16————————————————
版权声明:本文为CSDN博主「Apple_Coco」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/Apple_Coco/article/details/94334105
本文出自勇哥的网站《少有人走的路》wwww.skcircle.com,转载请注明出处!讨论可扫码加群:



少有人走的路


















