copyMakeBorder函数
copyMakeBorder函數:
調用方式:
void?copyMakeBorder(InputArray?src, OutputArray?dst, int?top, int?bottom, int?left, int?right, int?borderType, const Scalar&?value=Scalar()?)
參數的理解:
InputArray?src:輸入圖像
OutputArray?dst:輸出的圖像
int?top, int?bottom, int?left, int?right:表示對邊界每個方向添加的像素個數,就是邊框的粗細程度
int?borderType:表示邊界的類型
有下面幾種類型:
borderType:擴充邊緣的類型,就是外插的類型,OpenCV中給出以下幾種方式
??* BORDER_REPLICATE ? ? ? ? ? ?重復: ?就是對邊界像素進行復制
?* BORDER_REFLECT ? ? ? ? ? ? ? 反射:對感興趣的圖像中的像素在兩邊進行復制例如:fedcba|abcdefgh|hgfedcb ? ?反射
?* BORDER_REFLECT_101 ? ? ??反射101: 例子:gfedcb|abcdefgh|gfedcba
?* BORDER_WRAP ? ? ? ? ? ? ? ? ??外包裝:cdefgh|abcdefgh|abcdefg
?* BORDER_CONSTANT ? ? ? ? ? 常量復制:例子:iiiiii|abcdefgh|iiiiiii
const Scalar&?value=Scalar():表示如果邊界的類型是?BORDER_CONSTANT ?,那么邊界的顏色值;
opencv代碼:
#include <opencv2/core/core.hpp> #include <opencv2/highgui/highgui.hpp> #include <opencv2/imgproc/imgproc.hpp> #include <iostream>using namespace std; using namespace cv;int main() {Mat image, result;//獲得邊界的類型int borderType = BORDER_REPLICATE;//輸入字符int c;image = imread("D:6.jpg");if (!image.data){printf("fail to load image\n");return -1;}//使用說明cout << "使用說明:" << endl;cout << "按鍵c設置邊界為隨機的顏色" << endl;cout << "按鍵r設置邊界為原圖的顏色" << endl;cout << "按鍵按鍵ESC退出程序" << endl;//顏色隨機值Scalar value;//隨機數種子RNG rng(12345);//初始化參數:邊框的粗細int top = (int)(0.05*image.rows);int bottom = (int)(0.05*image.rows);int left = (int)(0.05*image.cols);int right = (int)(0.05*image.cols);result = image;//imshow("顯示結果",result);while (true){c = waitKey(500);if ((char)c == 27){break;}else if ((char)c == 'c'){//用常數添加邊框(255:白色)borderType = BORDER_CONSTANT;}else if ((char)c == 'r'){//復制原圖像的邊界像素borderType = BORDER_REPLICATE;}//設置隨機顏色value = Scalar(rng.uniform(0, 255), rng.uniform(0, 255), rng.uniform(0, 255));//在圖像周圍形成邊界:輸入圖像、輸出圖像(大小為源圖像+邊界)、上、下、左、右、邊界類型、顏色copyMakeBorder(image, result, top, bottom, left, right, borderType, value);imshow("顯示結果", result);}}
《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀
總結
以上是生活随笔為你收集整理的copyMakeBorder函数的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: buildPyramid函数
- 下一篇: dilate函数