卷積邊界cvCopyMakeBorder()函數

cvCopyMakeBorder()函數可以複製圖像並製作邊界,將特定圖像輕微變大,然後以各種方式自動填充圖像邊界,當Bordertype=IPL_BORDER_REPLICATE時,原始圖像邊緣的行和列被複制到大圖像的邊緣,當Bordertype=IPL_BORDER_CONSTANT時,有一個像素寬的黑色邊界。

--------------------------------------------------------------------------------------------------

CopyMakeBorder



複製圖像並且製作邊界。

void cvCopyMakeBorder( const CvArr* src, CvArr* dst, CvPoint offset, int bordertype, CvScalar value=cvScalarAll(0) );
src
輸入圖像。
dst
輸出圖像。(根據offset而相應改變大小)
offset

輸入圖像(或者其ROI)欲拷貝到的輸出圖像長方形的左上角座標(或者左下角座標,如果以左下角爲原點)。長方形的尺寸要和原圖像的尺寸的ROI分之一匹配。

指的是輸出圖像上指定哪個點爲原點座標,拷貝圖像。列子中選擇了cvPoint(5,5),cvPoint(25,25)這兩個點分別爲圖像的原點,則輸出圖像要對應的擴大cvSize(img->width+10,img->height+10),cvSize(img->width+50,img->height+50)。這裏輸出圖像至少要在邊界上加上原點座標值,當然最好是兩倍(不然就是隻有兩條邊會有邊框)。

bordertype已拷貝的原圖像長方形的邊界的類型:

IPL_BORDER_CONSTANT - 填充邊界爲固定值,值由函數最後一個參數指定。(默認黑色填充)

IPL_BORDER_REPLICATE -邊界用上下行或者左右列來複制填充。(其他兩種IPL邊界類型, IPL_BORDER_REFLECT 和IPL_BORDER_WRAP現已不支持)。

value如果邊界類型爲IPL_BORDER_CONSTANT的話,那麼此爲邊界像素的值。

函數cvCopyMakeBorder拷貝輸入2維陣列到輸出陣列的內部並且在拷貝區域的周圍製作一個指定類型的邊界。函數可以用來模擬和嵌入在指定算法實現中的邊界不同的類型。例如:和opencv中大多數其他濾波函數一樣,一些形態學函數內部使用複製邊界類型,但是用戶可能需要零邊界或者填充爲1或255的邊界。


列子

cvNamedWindow("a",0);

cvNamedWindow("b",0);

cvNamedWindow("c",0);

img=cvLoadImage("D:\kk.jpg",1);


img1 = cvCreateImage(cvSize(img->width+10,img->height+10), IPL_DEPTH_8U, 3 );

img2 = cvCreateImage(cvSize(img->width+50,img->height+50), IPL_DEPTH_8U, 3 );

cvShowImage("a",img);

cvCopyMakeBorder(img,img1,cvPoint(5,5),IPL_BORDER_CONSTANT,cvScalar(0,255,0));//默認黑色填充,現改爲綠色填充邊界

cvShowImage("b",img1);

//選擇25pix邊界可明顯看出邊界的區別

cvCopyMakeBorder(img,img2,cvPoint(25,25),IPL_BORDER_REPLICATE);

cvShowImage("c",img2);


101953803.jpg





發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章