一、概述
圖像在卷積的時候邊界像素不能被卷積,原因在於邊界沒有完全和kernel重疊,所以當3x3濾波時有一像素邊緣沒有被處理,當5x5濾波的時有2像素的邊緣沒有被處理。如下圖所示:
OpenCV中常見的邊緣填充方式主要有4種:
1.BORDER_DEFAULT:默認模式
2.BORDER_CONSTANT:用指定像素值填充邊緣
3.BORDER_REPLICATE:用已知的邊緣像素填充邊緣像素
4.BORDER_WRAP:用另外一邊的像素來補償填充
邊緣填充函數介紹:
copyMakeBorder( - Mat src, // 輸入圖像 - Mat dst, // 添加邊緣后的圖像 - int top, // 邊緣長度,一般上下左右都取相同值, - int bottom, - int left, - int right, - int borderType // 邊緣類型主要是如上的四種類型 - Scalar value ,//如果邊緣填充類型為BORDER_CONSTANT,則可以設置填充邊緣的顏色值 )
二、代碼示例
Mat src = imread(filePath); Mat constant = src.clone(); Mat replicate = src.clone(); Mat wrap = src.clone(); if(src.empty()){ return; } imshow("src",src); Mat border_default; copyMakeBorder(src,border_default,50,50,50,50,BORDER_DEFAULT);//系統默認填充方式 imshow("border_default",border_default); Mat border_constant; copyMakeBorder(constant,border_constant,50,50,50,50,BORDER_CONSTANT);//填充邊緣,用指定的像素值 imshow("border_constant",border_constant); Mat border_replicate; copyMakeBorder(replicate,border_replicate,50,50,50,50,BORDER_REPLICATE);//填充邊緣像素用已知邊緣像素值 imshow("border_replicate",border_replicate); Mat border_wrap; copyMakeBorder(src.clone(),border_wrap,50,50,50,50,BORDER_WRAP);//填充邊緣像素用已知邊緣像素值 imshow("border_wrap",border_wrap);