【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.包;用…包裹(或包扎、覆盖等);

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