【OpenCV:從零到一】13:卷積邊緣處理(borderType)

前言
這是我《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.包;用…包裹(或包紮、覆蓋等);

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