国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

OPENCV C++(五)濾波函數(shù)+sobel邊緣檢測(cè)+人臉磨皮mask

這篇具有很好參考價(jià)值的文章主要介紹了OPENCV C++(五)濾波函數(shù)+sobel邊緣檢測(cè)+人臉磨皮mask。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

濾波函數(shù)

?中值濾波

medianBlur(frame, detectmat, 5);

平均濾波

blur(frame, detectmat, Size(5, 5));

高斯濾波(最后一個(gè)是方差 越大越模糊)

GaussianBlur(frame, detectmat, Size(5, 5),0);

sobel的邊緣檢測(cè)函數(shù)

Sobel(gray, dx, CV_16S, 1, 0, 3);//x方向的 因?yàn)槭?,0
convertScaleAbs(dx, dx);//轉(zhuǎn)換絕對(duì)值
Sobel(gray, dy, CV_16SC1, 0, 1, 3);//y方向的 因?yàn)?,1
convertScaleAbs(dy, dy);
Sobel(gray, dx_add_dy1, CV_16SC1, 1, 1, 3);//嘗試一下1,1 發(fā)現(xiàn)并不是簡(jiǎn)單的都疊加
convertScaleAbs(dx_add_dy1, dx_add_dy1);//效果不好 為啥?

addWeighted(dx, 0.5, dy, 0.5, 0, dx_add_dy2);只能互相單獨(dú)做 然后再疊加的方式 效果很好

?


利用高斯濾波對(duì)人臉進(jìn)行平滑處理,學(xué)習(xí)mask的應(yīng)用

人臉閾值

//膚色h					
		double i_minH = 0;
		double i_maxH = 20;

		//膚色顏色飽和度s
		double i_minS = 43;
		double i_maxS = 255;

		//膚色顏色亮度v
		double i_minV = 55;
		double i_maxV = 255;

將原圖轉(zhuǎn)化為HSV類型,找出人臉并并給maskmat(這里是一個(gè)區(qū)域,人臉?biāo)莚oi)

		cvtColor(frame, hsvMat, COLOR_BGR2HSV);
		frame.copyTo(maskMat);
		cv::inRange(hsvMat, Scalar(i_minH, i_minS, i_minV), Scalar(i_maxH, i_maxS, i_maxV), maskMat);

對(duì)原圖進(jìn)行高斯濾波

GaussianBlur(frame, guss_Mat, Size(5, 5), 3, 0);

將高斯濾波后的人臉區(qū)域替換到原圖上

		frame.copyTo(objectMat);
		guss_Mat.copyTo(objectMat, maskMat);

		imshow("磨皮后", objectMat);




?

完整代碼:

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

int main() {


	VideoCapture cap(0);
	while (1) {

		Mat frame;
		
		Mat detectmat;
		Mat dx;
		Mat dy;
		Mat dx_add_dy1;
		Mat dx_add_dy2;
		Mat gray;

		cap >> frame;
		cvtColor(frame, gray, COLOR_BGR2GRAY);
		frame.copyTo(detectmat);
		
		//medianBlur(frame, detectmat, 5);
		//blur(frame, detectmat, Size(5, 5));
		//GaussianBlur(frame, detectmat, Size(5, 5),0); //最后一個(gè)是方差 越大越模糊
		Sobel(gray, dx, CV_16S, 1, 0, 3);
		convertScaleAbs(dx, dx);
		Sobel(gray, dy, CV_16SC1, 0, 1, 3);
		convertScaleAbs(dy, dy);
		Sobel(gray, dx_add_dy1, CV_16SC1, 1, 1, 3);
		convertScaleAbs(dx_add_dy1, dx_add_dy1);//效果不好 為啥?

		addWeighted(dx, 0.5, dy, 0.5, 0, dx_add_dy2);

		//imshow("frame", frame);

		//imshow("detect", detectmat);

		imshow("dx", dx);
		imshow("dy", dy);
		imshow("dx_add_dy1", dx_add_dy1);//效果不好
		imshow("dx_add_dy2", dx_add_dy2);

		/

		
		Mat hsvMat;
		Mat maskMat;
		Mat objectMat;
		Mat guss_Mat;

		//膚色h					
		double i_minH = 0;
		double i_maxH = 20;

		//膚色顏色飽和度s
		double i_minS = 43;
		double i_maxS = 255;

		//膚色顏色亮度v
		double i_minV = 55;
		double i_maxV = 255;

		cvtColor(frame, hsvMat, COLOR_BGR2HSV);
		frame.copyTo(maskMat);
		cv::inRange(hsvMat, Scalar(i_minH, i_minS, i_minV), Scalar(i_maxH, i_maxS, i_maxV), maskMat);
		GaussianBlur(frame, guss_Mat, Size(5, 5), 3, 0);
		frame.copyTo(objectMat);
		guss_Mat.copyTo(objectMat, maskMat);

		imshow("磨皮后", objectMat);

		waitKey(30);
	}











	return 0;
}

?文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-629654.html

到了這里,關(guān)于OPENCV C++(五)濾波函數(shù)+sobel邊緣檢測(cè)+人臉磨皮mask的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包