OpenCV入门(十一):感兴趣区域提取

该博客介绍了如何使用OpenCV的inRange函数从图像中分割出特定颜色范围的区域,创建一个二值化掩模,然后通过bitwise_not操作获取ROI(感兴趣区域),并利用copyTo函数将ROI复制到新的图像中。这个例子中,博主展示了如何从一幅图像中将月亮部分单独提取出来。
摘要由CSDN通过智能技术生成
void inRange(InputArray src, InputArray lowerb,
                          InputArray upperb, OutputArray dst);

inRange函数对于图像数据来说,将像素值满足在[lowerb,upperb]区间内的像素点置为255,区间外的置为0,生成一张与src同大小的二值化的单通道图像。

void copyTo( OutputArray m, InputArray mask ) 

image.copyTo(b,mask);
拷贝图像image在掩膜非0位置的像素点到b中。

一个小程序,将下图1中的月亮单独扣出来。
请添加图片描述
图1 image

void OpencvExample::Example_CvtROI(Mat &image)
{
	Mat dst, hsv, mask;
	vector<Mat>mv;

	//转换至hsv空间
	cvtColor(image, hsv, COLOR_BGR2HSV);
	imshow("hsv", hsv);

	//根据表1把蓝色背景分割出来得到背景mask
	inRange(hsv,Scalar(100,43,43),Scalar(124,255,255),mask);
	imshow("mask",mask);

	//创建一个全黑的图用来存放roi
	Mat roi = Mat::zeros(image.size(), image.type());

	//对mask取反,得到roi区域的mask
	bitwise_not(mask, mask);
	imshow("mask-not",mask);

	//复制得到roi区域图像
	image.copyTo(roi,mask);
	imshow("roi", roi);
}

图2 程序运行中间图
在这里插入图片描述

表1 常见颜色在hsv空间中各通道值的区间范围
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值