[OpenCV]拓展图像边界
来源:互联网 发布:文字ocr识别软件 编辑:程序博客网 时间:2024/05/16 18:38
图像处理中经常遇到使用当前像素邻的像素来计算当前像素位置的某些属性值,这样就会导致边界像素处越界访问,一般有两种方法解决这种问题:只对不越界的像素进行处理;对图像边界进行拓展,本文主要介绍如何使用OpenCV简单的对边界进行拓展。
边界的拓展方式
opencv提供了几种不同的边界拓展策略:
- * BORDER_REPLICATE: aaaaaa|abcdefgh|hhhhhhh
- * BORDER_REFLECT: fedcba|abcdefgh|hgfedcb
- * BORDER_REFLECT_101: gfedcb|abcdefgh|gfedcba
- * BORDER_WRAP: cdefgh|abcdefgh|abcdefg
- * BORDER_CONSTANT: iiiiii|abcdefgh|iiiiiii with some specified ’i’
* BORDER_REPLICATE: aaaaaa|abcdefgh|hhhhhhh* BORDER_REFLECT: fedcba|abcdefgh|hgfedcb* BORDER_REFLECT_101: gfedcb|abcdefgh|gfedcba* BORDER_WRAP: cdefgh|abcdefgh|abcdefg* BORDER_CONSTANT: iiiiii|abcdefgh|iiiiiii with some specified ’i’
以上内容取自OpenCV的帮助文档。其中 “|” 表示的是图像的边界,连个“|”中间是图像的内容,最后一个边界拓展策略还要额外给定一个i值,用于对额外的边界进行赋值。
边界拓展
使用OpenCV提供的函数copyMakeBorder()来拓展边界,其原型如下
- void copyMakeBorder( InputArray src, OutputArray dst, int top, int bottom, int left, int right, int borderType, const Scalar& value=Scalar() )
void copyMakeBorder( InputArray src, OutputArray dst, int top, int bottom, int left, int right, int borderType, const Scalar& value=Scalar() )
src:输入的数组。
dst:输出的拓展边界后的数组。
top:在src上边界向上拓展的行数。
bottom:在src下边界向下拓展的行数。
left:在src的左边界向左拓展的列数。
right:在src的右边界向右拓展的列数。
borderType:上一节中的边界拓展策略中的一个。
value:当你的边界策略使用的是BORDER_CONSTANT的时候,此处是指边界处填写的常数值。
实例
用一个简单实例来解释下如何拓展边界。
- Mat extendedIm;
- copyMakeBorder( orgIm, extendedIm, extRows, extRows, extCols, extCols, BORDER_REFLECT_101, Scalar::all(0) );
Mat extendedIm;copyMakeBorder( orgIm, extendedIm, extRows, extRows, extCols, extCols, BORDER_REFLECT_101, Scalar::all(0) );
在实例中,上下边界分别拓展extRows行,左右分别拓展extCols列,使用的是BORDER_REFLECT_101,最有一个参数,可以不写,我这里写上是为了告诉大家函数可以填写这些参数。
以下是实验代码和结果:
- #include <iostream>
- #include <opencv2/opencv.hpp>
- using namespace std;
- using namespace cv;
- int main(int argc, char**argv){
- Mat orgIm = imread(”theImage.png”);
- int extRows = 19;
- int extCols = 15;
- Mat extendedIm;
- copyMakeBorder( orgIm, extendedIm, extRows, extRows, extCols, extCols, BORDER_REFLECT_101);
- imshow(”original image”, orgIm);
- imshow(”extended image”, extendedIm);
- waitKey();
- return 0;
- }
#include <iostream>
上图是原始图像。
上图是拓展后的图像。
阅读全文
0 0
- [OpenCV]拓展图像边界
- [OpenCV]拓展图像边界
- [OpenCV]拓展图像边界
- [OpenCV]拓展图像边界
- [OpenCV]拓展图像边界
- [OpenCV]拓展图像边界
- OpenCV编程->图像边界拓展copyMakeBorder
- 图像边界填充OpenCV
- opencv图像边界的填充
- Opencv 给图像添加边界
- opencv-图像添加边界(填充)
- 【opencv练习19 - 图像添加边界】
- opencv:扩充图像边界—copyMakeBorder()函数
- opencv——扩充图像边界
- Python-OpenCV 处理图像:图像中边界和轮廓检测
- 调用OpenCV的cvFindContours方法获取图像边界
- 在OpenCV中图像边界扩展 copyMakeBorder 的实现
- opencv c++函数 imgproc模块 7 给图像添加边界
- 训练1
- 解析BeanDefinition之解析子元素replaced-method
- CVPR 2016 全部文章摘要阅读
- linux系统的用户和用户组简介
- 触发器优缺点
- [OpenCV]拓展图像边界
- (九) 两个Model之JSONModel
- opencv示例程序
- Opencv各个模块功能详细简介
- Android 悬浮窗基本使用
- Android的StateListDrawable详解
- {整理}向量运算证明
- 《shell脚本学习指南》笔录(包含小部分命令)
- 一个简单的站内搜索引擎的实现