知识点:
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,转载请注明出处!讨论可扫码加群:


