【13】opencv不规则ROI提取

机器视觉、图像处理中,从被处理的.图像以方框、圆、椭圆、 不规则多边形等方式勾勒出需要处理的区域,称为感兴趣区域,ROI

这里分为规则ROI提取与不规则ROI提取。

/*     以下是规则roi提取
int main() {	cv::Mat Photo = cv::imread("0003.jpg");	cv::namedWindow("origin");	cv::imshow("origin", Photo);
	int h = Photo.rows;	int w = Photo.cols;
	int cy = h / 2;	int cx = w / 2;	cv::Rect rect(cx + 130, cy -200, 200, 200);
	cv::Mat roi = Photo(rect);	imshow("roi", roi);
	cv::Mat image = roi.clone();
	// 直接更改ROI,因为是直接赋值的,指向同一块内存区域,所以原图也会被修改	roi.setTo(cv::Scalar(255, 0, 0));	cv::imshow("result",Photo);
	// 更改拷贝的ROI,指向不同的内存区域,所以原图不受影响	image.setTo(cv::Scalar(0, 0, 255));	cv::imshow("result2", Photo);	imshow("copy roi", image);
	cv::waitKey(0);}*/

对于不规则ROI提取我们会用到:

InRange()函数

OpenCV中的inRange()函数可实现二值化功能,可以同时针对多通道进行操作

 关于位运算中mask的使用详解:

OpenCV探索之路(十三):详解掩膜mask - Madcola - 博客园

附上学习时的代码:

int main(){

// 获取不规则形状的ROI,通过inRange函数
cv::Mat src2 = cv::imread("0008.jpg");
imshow("src2", src2);
cv::Mat hsv, mask;
cvtColor(src2, hsv, cv::COLOR_BGR2HSV);
imshow("hsv", hsv);
inRange(hsv, cv::Scalar(0, 0, 0), cv::Scalar(128,128,255), mask);
imshow("mask", mask);

// 通过mask提取人物部分,即我们的ROI。mask的白色区域才会执行与操作,黑色区域不执行
cv::Mat person;
bitwise_not(mask, mask);
imshow("mask2", mask);
bitwise_and(src2, src2, person, mask);
imshow("person", person);

// 生成蓝色背景
cv::Mat result = cv::Mat::zeros(src2.size(), src2.type());
result.setTo(cv::Scalar(0, 0, 255));

// 将蓝色背景与ROI融合
cv::Mat dst;
bitwise_not(mask, mask);
bitwise_or(result, result, dst, mask);
add(dst, person, dst);

imshow("dst", dst);

cv::waitKey(0);
}

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值