中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

OpenCV如何利用高斯模糊實現磨皮美顏效果

發布時間:2021-12-29 16:42:46 來源:億速云 閱讀:224 作者:小新 欄目:開發技術

這篇文章主要介紹了OpenCV如何利用高斯模糊實現磨皮美顏效果,具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。

1.高斯模糊

1.什么是高斯模糊

前面我們就知道了均值模糊和中值模糊,現在我們開始了解高斯模糊。

首先高斯指的是高斯函數,這個我想大家應該都知道,是一種非常常見的概率分布函數。大概就長這樣吧。

OpenCV如何利用高斯模糊實現磨皮美顏效果

通過均值模糊類比,我們可以大膽的猜出來高斯模糊的含義:

每一次需要處理的像素矩陣中不同地方的像素的值在最后的賦值像素的占比是不一樣的。這個占比是按照高斯函數所分布的。

也就是說,越是遠離中心像素的像素所占比重就更少,而中心像素值在賦值像素中的比重是最重的。

或者說,我們知道之前均值模糊所乘以的矩陣是

OpenCV如何利用高斯模糊實現磨皮美顏效果

而高斯模糊中所乘的3*3矩陣可以是這樣的

OpenCV如何利用高斯模糊實現磨皮美顏效果

可視化后就是這樣的

OpenCV如何利用高斯模糊實現磨皮美顏效果

雖然我們可以從數學上得知高斯模糊和均值模糊的區別,但是在效果上我個人覺得高斯模糊可能能比起均值模糊能更好的保留邊緣信息(只是個人看法)

最后把高斯模糊的計算公式提供給數學大佬

OpenCV如何利用高斯模糊實現磨皮美顏效果

2.opencv提供的API

GaussianBlur(Mat src, Mat dst, Size(11, 11), sigmax, sigmay);

其中Size(x, y), x, y 必須是正數而且是奇數

參數SigmaX表示高斯方程中X方向的標準方差

參數SigmaY表示高斯方程中X方向的標準方差

在高斯分布中,方差可以理解為這個高斯分布的平緩程度,也就是說中間值所占比重的大小,方差越小,中間值所占比重越大,此時模糊的效果會相對更低一點(在同一個size下)

可視化一下你會乘的矩陣:

當方差較大時:

OpenCV如何利用高斯模糊實現磨皮美顏效果

方差較小時:

OpenCV如何利用高斯模糊實現磨皮美顏效果

這里兩幅圖不是完全合適,只是類比

2.雙邊模糊

1.什么是雙邊模糊

由于考慮到不管是均值模糊或者高斯模糊,最后的效果都是整個圖像的模糊。有時候我們無需整體的模糊,而比如只模糊邊緣,或者只模糊細節。

而雙邊模糊便是實現了對邊緣信息的保留而弱化了細節。(這個效果可以用來磨皮,可以想想為啥)

實現的原理是我們確定一個數表示兩個像素之間的差值的閾值,一旦兩個像素之間超過了這個閾值,那么就不對這兩個像素進行高斯模糊處理,一旦沒有超過,就進行模糊處理。因為邊緣地區的像素差值是比較大的,這樣就能保留邊緣的信息。

2.opencv的API

bilateralFilter(src, dest, d=15, 150, 3);

15 –計算的半徑,半徑之內的像數都會被納入計算,如果提供-1 則根據sigma space參數取值

150 – sigma color 決定多少差值之內的像素會被計算

3 – sigma space 如果d的值大于0則聲明無效,否則根據它來計算d值

3.磨皮美顏效果的實現

1.實現過程

通過對雙邊模糊處理后的圖像再進行對比度加深的操作,最后就是讓模糊的邊緣再進行加深,幾乎回到原來的效果。而模糊效果去掉皮膚上的細節,從而可以讓皮膚顯得光滑并且顏色很有光澤。

并且我利用滑軌可以動態臺哦姐雙邊模糊的閾值從而讓你們自己控制磨皮的效果。

2.主要代碼

#include <opencv2/imgcodecs.hpp>
#include <opencv2/highgui.hpp>
#include <opencv2/imgproc.hpp>
#include <opencv2/highgui/highgui_c.h>
#include <iostream>

using namespace cv;
using namespace std;

int main(int argc, char** argv)
{
	string path = "xxxxxxxxxxxx.jpg";
	Mat img = imread(path);
	Mat img2 = Mat::zeros(img.size(), img.type());
	Mat img3;
	Mat kernel = (Mat_<char>(3, 3) << 0, -1, 0, -1, 5, -1, 0, -1, 0);
	imshow("img1", img);
	int x = 1, y = 1;
	namedWindow("Trackbars", (10, 100));//新建了一個窗口--軌跡欄
	createTrackbar("x", "Trackbars", &x, 200);
	while (1)
	{
		bilateralFilter(img,img2,15,x,3);
		imshow("img2", img2);
		filter2D(img2, img3, img.depth(), kernel);//src.depth()表示位圖深度,和type相關
		imshow("img3", img3);
		waitKey(10); 
	}
	waitKey(0);
	return 0;
}

3.效果

原圖:

OpenCV如何利用高斯模糊實現磨皮美顏效果

磨皮后:

OpenCV如何利用高斯模糊實現磨皮美顏效果

(邊緣信息沒有損失,但是色塊更加均勻了還是) 

感謝你能夠認真閱讀完這篇文章,希望小編分享的“OpenCV如何利用高斯模糊實現磨皮美顏效果”這篇文章對大家有幫助,同時也希望大家多多支持億速云,關注億速云行業資訊頻道,更多相關知識等著你來學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

崇阳县| 丰台区| 綦江县| 望奎县| 永定县| 吉林省| 乌什县| 峨眉山市| 玉环县| 晋城| 中牟县| 莎车县| 介休市| 新安县| 化州市| 白银市| 湖北省| 万山特区| 清苑县| 浦城县| 西充县| 腾冲县| 金昌市| 曲松县| 成都市| 白山市| 肃宁县| 日喀则市| 商丘市| 德清县| 准格尔旗| 疏附县| 武冈市| 江西省| 九寨沟县| 乐陵市| 西盟| 兴宁市| 丰宁| 通辽市| 浮山县|