欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

opencv学习笔记十三:边界填充

程序员文章站 2022-07-12 16:54:12
...

opencv添加边缘的方式有:

BORDER_DEFAULT:将最近的像素进行映射;

BORDER_CONSTANT:用常数填充;

BORDER_REPLICATE:复制最近的一行或一列像素并一直延伸至添加边缘的宽度或高度;

BORDER_WRAP:将对面的像素进行映射。

对于卷积操作,最边缘的像素一般无法处理,因为卷积核中心到不了最边缘像素,这时常用以上几种方法先将边界填充,再进行卷机操作,最后将扩充的边界去掉,则原图像每个像素都进行了卷积。

边界扩充API函数:copyMakeBorder(src, dst, top, bottom, left, right, borderType, color);

参数解释:原图像,目标图像,上下左右扩充的长度,填充的类型,常数填充时的颜色值。

#include<opencv2/opencv.hpp>
using namespace cv;

int main(int arc, char** argv)
{   
	Mat src, dst;
	src = imread("2.jpg");
	namedWindow("input",CV_WINDOW_AUTOSIZE);
	imshow("input", src);

	RNG rng(1);
	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);
	int borderType = BORDER_DEFAULT;
	while (true) {
		int c = waitKey(500);
		if ((char)c == 27) {
			break;
		}else if ((char)c == 'c') {
			borderType = BORDER_CONSTANT;
		}else if ((char)c == 'r') {
			borderType = BORDER_REPLICATE;
		}else if ((char)c == 'w') {
			borderType = BORDER_WRAP;
		}	
		Scalar color = Scalar(rng.uniform(0, 255), rng.uniform(0, 255), rng.uniform(0, 255));
		copyMakeBorder(src, dst, top, bottom, left, right, borderType, color);
		imshow("output", dst);
	}
	waitKey(0);
	return 0;
}

BORDER_DEFAULT运行结果如下:

opencv学习笔记十三:边界填充

 

BORDER_CONSTANT运行结果如下:

opencv学习笔记十三:边界填充

BORDER_REPLICATE运行结果如下:

opencv学习笔记十三:边界填充 

BORDER_WRAP运行结果如下:

opencv学习笔记十三:边界填充 

相关标签: 边界填充