GaussianBlur 高斯模糊
void GaussianBlur( InputArray src, OutputArray dst, Size ksize,
double sigmaX, double sigmaY = 0,
int borderType = BORDER_DEFAULT );
回傳值: 空
src:原影像
dst: 結果影像
ksize:模糊視窗的大小
sigmaX: X軸方向的卷積核標準差
sigmaY: Y軸方向的卷積核標準差,默認為零表示X=Y,當sigmaX,sigmaY同時為零的時候會從ksize中進行推算出sigmaX,sigmaY,
borderType: 邊界處理方式
例子:利用你高斯模糊處理圖片

void Demo::Gaussian_Blur(Mat &src){
Mat dst;
GaussianBlur(src, dst, Size(17, 17), 3);
imshow("高斯模糊", dst);
GaussianBlur(src, dst, Size(17, 17), 13);
//ksize或sigmaX,sigmaY越大模糊程度越大
imshow("高斯模糊1", dst);
}
bilateralFilter 雙邊模糊–美顏效果
void bilateralFilter( InputArray src, OutputArray dst, int d,
double sigmaColor, double sigmaSpace,
int borderType = BORDER_DEFAULT );
回傳值:空
src:輸入的原影像
dst:結果影像
d: 模糊的視窗的大小,如果為零 則從sigmaSpace中計算得出
sigmaColor:顏色控制元件的卷積核標準差
sigmaSpace:xy空間上面的卷積和標準差,當d>0不考慮sigmaSpace的大小
borderType :邊界處理的模式
例子: 利用雙邊模糊對任務進行美顏

void Demo::mybilateralFilter(Mat &src){
Mat dst;
//雙邊模糊
bilateralFilter(src,dst,0,100,10);
imshow("高斯雙邊模糊1", dst);
}
相對于高斯模糊和均值模糊雙邊模糊有一個更大的優點,就是他能夠保留圖片中的邊界 而不會把邊界進行模糊從而達到美顏的效果
blur 卷積模糊
void blur( InputArray src, OutputArray dst,
Size ksize, Point anchor = Point(-1,-1),
int borderType = BORDER_DEFAULT );
回傳值: 空
src:輸入的圓影像
dst: 輸出的結果影像
ksize: 卷積核的大小
anchor:卷積核的錨定點(中心點)
borderType: 邊界處理模式
例子 對影像進行模糊

Mat dst;
blur(src, dst, Size(9, 9));
imshow("卷積模糊", dst);
copyMakeBorder 邊界處理
void copyMakeBorder(InputArray src, OutputArray dst,
int top, int bottom, int left, int right,
int borderType, const Scalar& value = Scalar() );
回傳值:空
src 輸入的原影像
dst:輸出的結果影像
top:插入頂邊界的寬
bottom:插入底邊界的寬
left:插入左邊界的寬
right:插入右邊界的寬
borderType:邊界處理的方法
Scalar:顏色值
| borderType | 意思 |
|---|---|
| BORDER_CONSTANT | 對邊界指定一個常數 |
| BORDER_REPLICATE | 復制圖形邊上的一個像素填充到邊界上 aaaaaa|abcdefgh|hhhhhhh |
| BORDER_REFLECT | 邊界對影像進行映射 fedcba|abcdefgh|hgfedcb |
| BORDER_WRAP | 左右上下顛倒 把底邊的像素填充到上邊界,把上邊的像素填充到地辯解 cdefgh |
| BORDER_REFLECT_101 | gfedcb|abcdefgh| gfedcba |

由以上圖騙我們可以看出各個方法區別所在
void Demo::myBlury(Mat &src){
Mat dst;
copyMakeBorder(src,dst,16,16,16,16,BORDER_CONSTANT,Scalar(0,0,255) );
namedWindow("BORDER_CONSTANT", WINDOW_FREERATIO);
imshow("BORDER_CONSTANT", dst);
copyMakeBorder(src,dst,16,16,16,16,BORDER_REPLICATE );
namedWindow("BORDER_REPLICATE", WINDOW_FREERATIO);
imshow("BORDER_REPLICATE", dst);
copyMakeBorder(src,dst,16,16,16,16,BORDER_REFLECT );
namedWindow("BORDER_REFLECT", WINDOW_FREERATIO);
imshow("BORDER_REFLECT", dst);
copyMakeBorder(src,dst,16,16,16,16,BORDER_WRAP );
namedWindow("BORDER_WRAP", WINDOW_FREERATIO);
imshow("BORDER_WRAP", dst);
copyMakeBorder(src,dst,16,16,16,16,BORDER_REFLECT_101 );
namedWindow("BORDER_REFLECT_101", WINDOW_FREERATIO);
imshow("BORDER_REFLECT_101", dst);
//blur(src, dst, Size(9, 9));
// imshow("BORDER_CONSTANT ", dst);
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/375076.html
標籤:其他
下一篇:動手實踐系列:CV語意分割!
