卷积边界的函数为:
复制图像并且制作边界。
void cvCopyMakeBorder( const CvArr* src, CvArr* dst, CvPoint offset, int bordertype, CvScalar value=cvScalarAll(0) );
函数cvCopyMakeBorder拷贝输入2维阵列到输出阵列的内部并且在拷贝区域的周围制作一个指定类型的边界。函数可以用来模拟和嵌入在指定算法实现中的边界不同的类型。例如:和opencv中大多数其他滤波函数一样,一些形态学函数内部使用复制边界类型,但是用户可能需要零边界或者填充为1或255的边界。
有例题为:
#include "StdAfx.h" #include"cv.h" #include"highgui.h" #include "stdio.h" #include "stdlib.h" int main(int argc,char**argv) { IplImage*src,*dst1,*dst2; src=cvLoadImage("test3.bmp"); dst1 = cvCreateImage(cvSize(src->width+3,src->height+3) ,IPL_DEPTH_8U,3); dst2 = cvCreateImage(cvSize(src->width+3,src->height+3) ,IPL_DEPTH_8U,3); cvNamedWindow("src",0); cvShowImage("src",src); cvNamedWindow("dst1",0); cvNamedWindow("dst2",0); cvCopyMakeBorder(src,dst1,cvPoint(1,1),IPL_BORDER_CONSTANT); cvShowImage("dst1",dst1); cvCopyMakeBorder(src,dst2,cvPoint(1,1),IPL_BORDER_REPLICATE); cvShowImage("dst2",dst2); cvWaitKey(0); cvReleaseImage(&src); cvReleaseImage(&dst1); cvReleaseImage(&dst2); return 0; }
可以看到,dst1为固定值填充,边界都被填充为0,dst2为取代填充即原先的边界为何值,新的边界就被填充为何值。
问题:
为何他们的大小不一致了呢?
参考文献:
1.学习OpenCV,刘瑞祯,于仕祺,清华大学出版社,pp.167-169
2.http://www.opencv.org.cn/index.php/Cv图像处理
3.http://blog.csdn.net/cartoonface/article/details/6007521