栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

opencv copy_opencv copyto clone?

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

opencv copy_opencv copyto clone?

Index 目录索引

写在前面函数介绍案例演示参考文章


写在前面

继前文的setTo()函数讲解后,本文对和该函数用法类似的OpenCV中的copyTo()函数进行讲解。

函数介绍

可以直接在 OpenCV参考文档 中查阅:

该函数的用法为:

src.copyTo(dst, mask); 

代表src拷贝到dst图上。拷贝的过程中,将src在mask上不为0的对应像素点进行拷贝。正如官方文档中讲到的 Its non-zero elements indicate which matrix elements need to be copied。


案例演示

如果根据例子的话,或许更好理解这个函数的原理,我们都知道,HSV空间中,因为只有H和S通道控制颜色,所以将图像从RGB转换到色彩辨识度更高的HSV空间,可以进行颜色提取,具有代表性的一个应用就是抠图。本文举一个从绿色背景中抠取前景人物图像,并将绿色背景改为红色背景的小案例,案例中参考了贾志刚老师的OpenCV系列课程代码。

void demo(cv::Mat& image){
	//目的:从绿色背景中抠出前景人物图像
	cv::Mat hsv, mask;
	cvtColor(image, hsv, cv::COLOR_BGR2HSV);
	inRange(hsv, cv::Scalar(35, 43, 46), cv::Scalar(77, 255, 255), mask);
	cv::imshow("mask", mask);   // 得到前景人像区域为黑色,背景白色的mask图

	//目的:将绿色背景换为红色
	cv::Mat redback = cv::Mat::zeros(image.size(), image.type());
	redback = cv::Scalar(40, 40, 200);
	//把人像拷贝到redback上
	bitwise_not(mask, mask);   //取反操作,白变黑,黑变白,将前景人像区域变为白色,背景变为黑色
	//cv::imshow("mask2", mask);
	image.copyTo(redback, mask);  //image拷贝到redback图上。拷贝的过程中,将image在mask上对应不为0的像素点进行拷贝
	cv::imshow("redback", redback);
}

通过Image Watch这个插件,我们可以看到案例中各个变量的值:

原图:


背景变换后的图:


至此,想必各位已经对copyTo()函数有了一个相当清晰的了解,写到这里,差不多本文也就要结束了。如果我的这篇文章帮助到了你,那我也会感到很高兴,一个人能走多远,在于与谁同行。


参考文章
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/783167.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号