opencv学习日志19-磨皮

前言

这篇文章主要讲述opencv图像处理中磨皮算法的应用。

一、磨皮算法

//第五题 磨皮
/*注释:
image.copyTo(imageROI,mask);  
把image这张图复制(copy to)到imageROI上,
且image对应mask中像素值为0(黑色)的像素点都不会贴到imageROI上。

*/
#include <opencv2/opencv.hpp>
#include <iostream>
using namespace cv;
using namespace std;

int main()
{
	VideoCapture cap("C://Users//john//Desktop//VID1.mp4");



	double scale = 0.5;

	//0-188
	//肤色
	double i_minH = 0;
	double i_maxH = 20;
	//0-255
	double i_minS = 43;
	double i_maxS = 255;
	//0-255
	double i_minV = 55;
	double i_maxV = 255;

	while (1)
	{
		Mat frame;
		Mat hsvMat;
		Mat detectMat;
		Mat finalpicture;
		Mat rframetemp;
		Mat backskin;
		cv::Size rect;
		rect.width = 3;
		rect.height = 3;
		cap >> frame;

		Size ResImgSiz = Size(frame.cols*scale, frame.rows*scale);
		Mat rFrame = Mat(ResImgSiz, frame.type());
		resize(frame, rFrame, ResImgSiz, INTER_LINEAR);
	

		cvtColor(rFrame, hsvMat, COLOR_BGR2HSV);  //HSV
		rFrame.copyTo(rframetemp);

		GaussianBlur(rFrame, rframetemp, rect, 5, 5);     //均值滤波磨皮
		rframetemp.copyTo(detectMat);
		cv::inRange(hsvMat, Scalar(i_minH, i_minS, i_minV), Scalar(i_maxH, i_maxS, i_maxV), detectMat);//二值化来获得mask

		rframetemp.copyTo(finalpicture,detectMat);  //磨皮后拷贝

		bitwise_not(detectMat, backskin);

		rFrame.copyTo(finalpicture, backskin);  //把原图中未磨皮部分拷贝
		cv::imshow("rFrame", rFrame);
		cv::imshow("finalpicture", finalpicture);
		waitKey(0);



	}

}

总结

1.代码可以直接运行,如有不懂请直接留言哦。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

@白圭

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值