opencv图像边界的填充
生活随笔
收集整理的這篇文章主要介紹了
opencv图像边界的填充
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
填充圖像邊界的兩種方法:
源碼部分給出更加詳細的解釋。
源碼
本程序做什么?
-
裝載圖像
-
由用戶決定使用哪種填充方式。有兩個選項:
- 常數邊界: 所有新增邊界像素使用一個常數,程序每0.5秒會產生一個隨機數更新該常數值。
- 復制邊界: 復制原圖像的邊界像素。
用戶可以選擇按 ‘c’ 鍵 (常數邊界) 或者 ‘r’ 鍵 (復制邊界)
當用戶按 ‘ESC’ 鍵,程序退出。
下面是本教程的源碼, 你也可以從?這里?下載
解釋
首先申明程序中用到的變量:
Mat src, dst; int top, bottom, left, right; int borderType; Scalar value; char* window_name = "copyMakeBorder Demo"; RNG rng(12345);尤其要注意變量?rng?,這是一個隨機數生成器, 用來產生隨機邊界色彩。
裝載原圖像?src:
src = imread( argv[1] );if( !src.data ) { return -1;printf(" No data entered, please enter the path to an image file \n"); }在簡要說明了程序的使用方法后,創建一個顯示窗口:
namedWindow( window_name, CV_WINDOW_AUTOSIZE );初始化邊界寬度參數(top,?bottom,?left?和?right)。我們將它們設定為圖像?src?大小的5%。
top = (int) (0.05*src.rows); bottom = (int) (0.05*src.rows); left = (int) (0.05*src.cols); right = (int) (0.05*src.cols);程序進入?while?循環。 如果用戶按’c’鍵或者 ‘r’鍵, 變量?borderType?分別取值?BORDER_CONSTANT?或?BORDER_REPLICATE?:
while( true ){c = waitKey(500);if( (char)c == 27 ){ break; }else if( (char)c == 'c' ){ borderType = BORDER_CONSTANT; }else if( (char)c == 'r' ){ borderType = BORDER_REPLICATE; }每個循環 (周期 0.5 秒), 變量?value?自動更新...
value = Scalar( rng.uniform(0, 255), rng.uniform(0, 255), rng.uniform(0, 255) );為一個由?RNG?類型變量?rng?產生的隨機數。 隨機數的范圍在??之間。
最后調用函數?copyMakeBorder?填充邊界像素:
copyMakeBorder( src, dst, top, bottom, left, right, borderType, value );接受參數:
顯示輸出圖像
imshow( window_name, dst );結果
在編譯上面的代碼之后, 我們可以運行結果,將圖片路徑輸入。 結果應該為:
- 程序啟動時邊界類型為 BORDER_CONSTANT (0), 因此,一開始邊界顏色任意變換。
- 如果用戶按 ‘r’ 鍵, 邊界將會變成原圖像邊緣的拷貝。
- 如果用戶按 ‘c’ 鍵, 邊界再次變為任意顏色。
- 如果用戶按 ‘ESC’ 鍵,程序退出。
下面顯示了幾張截圖演示了邊界顏色如何改變,以及在邊界類型為?BORDER_REPLICATE?時的情形:
總結
以上是生活随笔為你收集整理的opencv图像边界的填充的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: opencv 线性滤波器
- 下一篇: opencv sobel导数