函数
void copyMakeBorder(InputArray src, OutputArray dst, int top, int bottom, int left, int right, int borderType, const Scalar& value = Scalar() );
扩展边界函数,原图像扩展上下左右尺寸,按不同borderType填充不同像素
参数:
enum BorderTypes {
BORDER_CONSTANT = 0, //!< `iiiiii|abcdefgh|iiiiiii` with some specified `i`
BORDER_REPLICATE = 1, //!< `aaaaaa|abcdefgh|hhhhhhh`
BORDER_REFLECT = 2, //!< `fedcba|abcdefgh|hgfedcb`
BORDER_WRAP = 3, //!< `cdefgh|abcdefgh|abcdefg`
BORDER_REFLECT_101 = 4, //!< `gfedcb|abcdefgh|gfedcba`
BORDER_TRANSPARENT = 5, //!< `uvwxyz|absdefgh|ijklmno`
BORDER_REFLECT101 = BORDER_REFLECT_101, //!< same as BORDER_REFLECT_101
BORDER_DEFAULT = BORDER_REFLECT_101, //!< same as BORDER_REFLECT_101
BORDER_ISOLATED = 16 //!< do not look outside of ROI
};
代码:
void test_copyMakeBorder(Mat & srcimg){
printf("srcimg w=%d,h=%d\n",srcimg.cols,srcimg.rows);
imshow("1 srcimg",srcimg);
int size=100;
Mat copyMakeBorder_img;
copyMakeBorder(srcimg,copyMakeBorder_img,size,size,size,size,BORDER_CONSTANT);
imshow("2 BORDER_CONSTANT",copyMakeBorder_img);
copyMakeBorder(srcimg,copyMakeBorder_img,size,size,size,size,BORDER_REPLICATE);
imshow("3 BORDER_REPLICATE",copyMakeBorder_img);
copyMakeBorder(srcimg,copyMakeBorder_img,size,size,size,size,BORDER_REFLECT);
imshow("4 BORDER_REFLECT",copyMakeBorder_img);
copyMakeBorder(srcimg,copyMakeBorder_img,size,size,size,size,BORDER_WRAP);
imshow("5 BORDER_WRAP",copyMakeBorder_img);
copyMakeBorder(srcimg,copyMakeBorder_img,size,size,size,size,BORDER_REFLECT101);
imshow("6 BORDER_REFLECT101",copyMakeBorder_img);
printf("srcimg w=%d,h=%d\n",copyMakeBorder_img.cols,copyMakeBorder_img.rows);
while(waitKey(30) ==255);
}
int main(){
Mat srcimg=imread("test_plane.png");
test_copyMakeBorder(srcimg);
return 0;
}
结果:
总结:
BORDER_CONSTANT——填充固定值
BORDER_REPLICATE——复制边缘的像素扩展边界
BORDER_REFLECT——镜像复制扩展边界
BORDER_WRAP——复制对边的像素扩展边界
BORDER_REFLECT_101——镜像复制扩展边界,边界像素除外