OpenCV的copyTo()函数讲解及应用


写在前面

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

函数介绍

可以直接在 OpenCV参考文档 中查阅:
在这里插入图片描述
该函数的用法为:

src.copyTo(dst, mask); 

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


案例演示

如果根据例子的话,或许更好理解这个函数的原理,我们都知道,HSV空间中,因为只有HS通道控制颜色,所以将图像从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()函数有了一个相当清晰的了解,写到这里,差不多本文也就要结束了。如果我的这篇文章帮助到了你,那我也会感到很高兴,一个人能走多远,在于与谁同行。


参考文章

  • 9
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值