首页 > 其他分享 > 12 图像色彩空间转换 - 进阶

12 图像色彩空间转换 - 进阶

时间:2023-01-13 10:49:00浏览次数:53  
标签:12 进阶 image mask 图像 Mat inRange 色彩 255

12 图像色彩空间转换 - 进阶

opencv知识点:

  • 色彩空间转换 - cvtColor()
  • 提取指定色彩范围区域 - inRange()
  • 更换图像背景 - copyTomask用法

本课所解决的问题:

  • 如何提取指定色彩范围的区域?
  • 如何更换图像的背景?

1.HSV色彩空间

HSV相较于BGR色彩空间,颜色的区分度比较明显,对某个颜色来说可以很容易的提取出来。

109634d8546a4c0a800648c617cef741

2.提取指定色彩范围区域

在opencv中,我们提取指定色彩范围的区域,采用inRange实现,这样的一块区域,学名叫做ROI(region of interest),感兴趣区域

关于inRange的提取原理

图像中,对于在指定色彩范围内的颜色,将置为255(白色),不在的则置为0(黑色)
对于多通道的输入,输出结果是各个通道的结果相与,当各通道结果都在上下限之内时,输出为255,否则为0。
因此也有人将输出理解为mask掩码模板,作为mask使用。

inRange
	提取指定色彩范围内的区域
		共4个参数
			第1个参数 输入
			第2个参数 色彩下界
			第3个参数 色彩上界
			第4个参数 输出

程序:

//函数定义
void inrange_demo(Mat& image);           //   .h文件

//函数实现
void QuickDemo::inrange_demo(Mat& image) {                   //    .cpp

	Mat dst;
	cvtColor(image, dst, COLOR_BGR2HSV);
	/*
	为了提取指定色彩范围内的区域,我们先把图像转换为HSV色彩空间
	*/

	Mat mask;
	inRange(dst, Scalar(100, 43, 46), Scalar(124, 255, 255), mask);
	imshow("提取", mask);
}

ef46aaa358a58a8c38678c35d7954eb

3.更换图像背景

更换图像背景,这里利用到了重载的copyTo

copyTo
	重载的拷贝
		共2个参数
			第1个参数 输出
			第2个参数 输入

当我们传入mask时,这里的copyTo只会拷贝到mask中不为0的像素点,即白色区域(255)

inRange提取后,指定色彩区域为255,roi区域为0。
为了利用copyto,我们需要对提取后的图像进行非操作,这样roi区域就会变为255。

程序:

void QuickDemo::inrange_demo(Mat& image) {

	Mat dst;
	cvtColor(image, dst, COLOR_BGR2HSV);

	Mat mask;

	inRange(dst, Scalar(100, 43, 46), Scalar(124, 255, 255), mask);

	imshow("提取", mask);

	Mat greenback = Mat::zeros(image.size(), image.type());
	greenback = Scalar(40, 200, 40);

	bitwise_not(mask, mask);
	imshow("非", mask);

	image.copyTo(greenback, mask);
	/*
		mask剩下的黑色区域,由greenback填充
	*/
	imshow("绿色", greenback);

}

3af7c8d927bde5de7baa61fe5621c20

本课所用API查阅

OpenCV 4.6.0 官方文档

cvtColor()

img *= 1./255;
cvtColor(img, img, COLOR_BGR2Luv);

inRange()

copyTo()

标签:12,进阶,image,mask,图像,Mat,inRange,色彩,255
From: https://www.cnblogs.com/L707/p/17048780.html

相关文章

  • leetcode_数据结构_入门_121. 买卖股票的最佳时机
    121.买卖股票的最佳时机  问题:给定一个数组prices,它的第 i个元素 prices[i]表示一支给定股票第i天的价格。只能选择某一天买入这只股票,并选择在未来的某......
  • 【题解】P4126 [AHOI2009]最小割
    题意求最小割和可行边和必须边。思路清真,清真,还是**的清真。考虑可行边的充要条件:满流不存在另一条\(u,v\)间的最短路,即在残量网络上不存在包含\(u,v\)......
  • 09-MobileNet 图像分类
       MobileNet的pytorch代码实现:1importtorch.nnasnn2fromcollectionsimportOrderedDict3importtorch4#fromtorchsummaryimportsummary......
  • 1.12刷题记录
    1.[XMAN2018排位赛]通行证打开附件看出里面这是base64加密于是去解密然后又得到了新的密码--kanbbrgghjl{zb____}vtlaln这是栅栏密码然后一系列操作kzna{blnl_ab......
  • 闲话/社论 23.1.12
    u群看到的一道题挺好玩的,写篇博客参考资料:20210620省队互测-qwaszx题解,qwaszx;某篇没有链接的知乎回答,EI,Rebelz.定义一个\(1,2,\cdots,n\)的排列是好的,当......
  • 解决MySQL导入SQL文件时“Row size too large (> 8126)”的问题
    用VSCode替换掉sql文件中所有ROW_FORMAT=COMPACT为ROW_FORMAT=DYNAMIC或者ROW_FORMAT=COMPRESSED。ROW_FORMAT=DYNAMIC和ROW_FORMAT=COMPRESSED的主要区别为ROW_FORMAT=CO......
  • 230112_50_SpringBoot入门
    springboot主启动类程序分析pom.xml<?xmlversion="1.0"encoding="UTF-8"?><projectxmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org......
  • MySQL 进阶篇 Part 2
    ......
  • 1.12 构造
    1710A-ColorthePicture题意给出n*m的矩阵和k中颜色,每种颜色有\(a_i\)个,要求矩阵每个单元都可以被涂上颜色且每个颜色相邻单元都至少有三个相同颜色,问是否可能思......
  • 读写显示图像(opencv pyplot)
    1importcv2ascv2importnumpyasnp3frommatplotlibimportpyplotasplt45if__name__=='__main__':67#读取图片8img=cv.imrea......