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运行结果如下:
BORDER_CONSTANT运行结果如下:
BORDER_REPLICATE运行结果如下:
BORDER_WRAP运行结果如下:
上一篇: Linux -- 防火墙
推荐阅读