opencv学习(三十一)之图像边缘像素填充估计copyMakeBorder()
2017-02-15 17:55
621 查看
前面讲到图像卷积运算的时候涉及到对图像边缘像素的估计,这里讲介绍图像边缘像素进行卷积运算。大部分opencv中的函数是将原图像复制到一个比原图像尺寸更大的图像中然后实现边缘的自动填充。这种方式得到的像素点可以执行卷积操作。下面介绍两种方式:
- 1.BORDER_CONSTANT:使用一个常数填充像素边缘
- 2.BORDER_REPLICATE:将图像中边缘的行和列像素值直接填充像素边缘
opencv提供了copyMakeBorder()函数实现对图像边缘像素填充的功能,其函数原型如下:
参数解释:
InputArray: 输入图像
OutputArray: 输出图像
int top/bottom/left/right四个参数指定原图像由每个方向上向外插入的像素个数,例如:top=1, bottom=1, left=1, right=1意味着图像向外扩充一个像素。
int borderType: 边缘类型,可以通过borderInterpolate()查看详细信息。
const Scalar & value = Scalar():当像素填充类型为BORDER_CONSTANT时填充的像素值。
其示例代码如下:
运行结果如下:
- 1.BORDER_CONSTANT:使用一个常数填充像素边缘
- 2.BORDER_REPLICATE:将图像中边缘的行和列像素值直接填充像素边缘
opencv提供了copyMakeBorder()函数实现对图像边缘像素填充的功能,其函数原型如下:
void cv::copyMakeBorder ( InputArray src, OutputArray dst, int top, int bottom, int left, int right, int borderType, const Scalar & value = Scalar() )
参数解释:
InputArray: 输入图像
OutputArray: 输出图像
int top/bottom/left/right四个参数指定原图像由每个方向上向外插入的像素个数,例如:top=1, bottom=1, left=1, right=1意味着图像向外扩充一个像素。
int borderType: 边缘类型,可以通过borderInterpolate()查看详细信息。
const Scalar & value = Scalar():当像素填充类型为BORDER_CONSTANT时填充的像素值。
其示例代码如下:
/*程序说明 *当按下按键‘c’代表使用BORDER_CONSTANT *RNG生成的随机数作为像素值进行填充 *当按下按键‘r’代表使用BORDER_REPLICATE *图像扩充的边框由原图像边缘像素的值进行填充 */ #include <opencv2/imgproc.hpp> #include <opencv2/core.hpp> #include <opencv2/highgui.hpp> #include <iostream> #include <stdlib.h> #include <stdio.h> using namespace std; using namespace cv; //声明全局变量 Mat srcImage, dstImage; int g_top, g_bottom, g_left, g_right; int borderType; Scalar value; String windowName = "copyMakeBorder Demo"; RNG rng(12345); int main() { int c; srcImage = imread("dog.jpg"); //判断图像是否加载成功 if(srcImage.empty()) { cout << "图像加载失败!" << endl; return -1; } else cout << "图像记载成功" << endl << endl; imshow("原图像", srcImage); //程序使用说明 printf("\n \t copyMakeBorder Demo: \n"); printf("\t --------------------\n"); printf("**Press 'c' to set the border to a random constant value \n"); printf("**Press 'r' to set the border to be replicated \n"); printf("**Press 'ESC' to exit the program \n"); //创建窗口 namedWindow(windowName, WINDOW_AUTOSIZE); //初始化边框参数 g_top = (int)(0.05*srcImage.rows); g_bottom = (int)(0.05*srcImage.rows); g_left = (int)(0.05*srcImage.cols); g_right = (int)(0.05*srcImage.cols); //显示初始图像 dstImage = srcImage; imshow(windowName, dstImage); while(true) { c = waitKey(500); if((char)c == 27) //c为ESC程序退出 {break;} else if((char)c == 'c') {borderType = BORDER_CONSTANT;} else if((char)c == 'r') {borderType = BORDER_REPLICATE;} value = Scalar(rng.uniform(0, 255), rng.uniform(0, 255), rng.uniform(0, 255)); copyMakeBorder(srcImage, dstImage, g_top, g_bottom, g_left, g_right, borderType, value); imshow(windowName, dstImage); } return 0; }
运行结果如下:
相关文章推荐
- opencv3实现图像裁剪和图像填充(cv::copyMakeBorder)
- 在OpenCV中图像边界扩展 copyMakeBorder 的实现
- 在OpenCV中图像边界扩展 copyMakeBorder 的实现
- 在OpenCV中图像边界扩展 copyMakeBorder 的实现
- 在OpenCV中图像边界扩展 copyMakeBorder 的实现
- 在OpenCV中图像边界扩展 copyMakeBorder 的实现
- 在OpenCV中图像边界扩展 copyMakeBorder 的实现
- 在OpenCV中图像边界扩展 copyMakeBorder 的实现
- OpenCV编程->图像边界拓展copyMakeBorder
- opencv:扩充图像边界—copyMakeBorder()函数
- C++ 图像边界扩充函数copyMakeBorder
- 在OpenCV中图像边界扩展 copyMakeBorder 的实现
- OpenCV学习十六:copyMakeBorder 边缘处理
- 边界填充 cvCopyMakeBorder
- OpenCV滤波之copyMakeBorder和borderInterpolate .
- OpenCV学习之旅——copyMakeBorder()函数
- OpenCV Tutorial: 卷積邊界處理(copyMakeBorder)
- 安卓像素级别填充图像颜色ps颜料桶实现
- 全卷积网络:从图像级理解到像素级理解-FCN图像分割边缘检测
- 【OpenCV】图像旋转详解,边缘用黑色填充