前言
這是我《OpenCV:從零到一》專欄的第十三篇博客,想看跟多請戳這。
本文概要
copyMakeBorder爲圖片添加邊框
複習RNG
案例代碼
大概內容:循環體實現切換邊界類型(也可以用createTrackbar)。
#include <opencv2/opencv.hpp>
#include <iostream>
#include <math.h>
using namespace cv;
int main(int argc, char** argv) {
Mat src, dst;
src = imread("D://86186//Documents//opencv//lena.jpg");
if (!src.data) {
printf("could not load image...\n");
return -1;
}
char INPUT_WIN[] = "input image";
char OUTPUT_WIN[] = "Border Demo";
namedWindow(INPUT_WIN, WINDOW_AUTOSIZE);
namedWindow(OUTPUT_WIN, WINDOW_AUTOSIZE);
imshow(INPUT_WIN, src);
int top = (int)(0.05*src.rows);
int bottom = (int)(0.05*src.rows);
int left = (int)(0.05*src.cols);
int right = (int)(0.05*src.cols);
RNG rng(12345);
int borderType = BORDER_DEFAULT;//默認
int c = 0;
while (true) {
c = waitKey(500);
if ((char)c == 27) {// ESC的ASCII碼是27
break;
}
if ((char)c == 'r') {
borderType = BORDER_REPLICATE;//replicate複製;(精確地)仿製;再造;再生
}
else if ((char)c == 'w') {//wrap v.包;用…包裹(或包紮、覆蓋等);
borderType = BORDER_WRAP;
}
else if ((char)c == 'c') {
borderType = BORDER_CONSTANT;//常量
}//else 和 else if 還是有區別的
Scalar color = Scalar(rng.uniform(0, 255), rng.uniform(0, 255), rng.uniform(0, 255));
copyMakeBorder(src, dst, top, bottom, left, right, borderType, color);//Forms a border around an image.
/*
建立一個邊框包圍一個圖像
copyMakeBorder(src, dst,int top,int bottom,int left,int right,int borderType,Scalar color);
上下左右指的是邊框的寬度,color是指顏色
*/
imshow(OUTPUT_WIN, dst);
}
GaussianBlur(src, dst, Size(5, 5), 0, 0);
imshow(OUTPUT_WIN, dst);
waitKey(0);
return 0;
}
運行效果:
解析及注意事項
我們已經認識了borderType好久了,他就像一個最熟悉的陌生人,我們一直都沒有了解過他,其實他不過就是一些邊框的樣式,平時處理圖像的時候基本不會用,所以我們之前都沒有理睬他,但是涉及掩膜操作有不得不提到這個參數,所以每個掩膜操作的函數都有一個這樣的參數,然而我絕大多數都不用填,他有默認值。
全註釋代碼
程序比較簡單,代碼同上。
翻譯筆記
replicate v複製;(精確地)仿製;再造;再生
Form v.建立
extrapolate v.推斷;判定;推測;推知
wrap v.包;用…包裹(或包紮、覆蓋等);