OpenCV對圖片進行邊緣像素填充


一、概述

  圖像在卷積的時候邊界像素不能被卷積,原因在於邊界沒有完全和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);

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM