第六章 图像变换/卷积边界

第六章 图像变换/卷积边界

//rorger,2010整理

详细介绍请见学习OpenCV中文版 167页

CopyMakeBorder
复制图像并且制作边界。

void cvCopyMakeBorder( const CvArr* src, CvArr* dst, CvPoint offset,
int bordertype, CvScalar value=cvScalarAll(0) );
src
输入图像。
dst
输出图像。
offset
输入图像(或者其ROI)欲拷贝到的输出图像长方形的左上角坐标(或者左下角坐标,如果以左下角为原点)。长方形的尺寸要和原图像的尺寸的ROI分之一匹配。
bordertype
已拷贝的原图像长方形的边界的类型:
IPL_BORDER_CONSTANT - 填充边界为固定值,值由函数最后一个参数指定。IPL_BORDER_REPLICATE -边界用上下行或者左右列来复制填充。(其他两种IPL边界类型, IPL_BORDER_REFLECT 和IPL_BORDER_WRAP现已不支持)。
value
如果边界类型为IPL_BORDER_CONSTANT的话,那么此为边界像素的值。
函数cvCopyMakeBorder拷贝输入2维阵列到输出阵列的内部并且在拷贝区域的周围制作一个指定类型的边界。函数可以用来模拟和嵌入在指定算法实现中的边界不同的类型。例如:和opencv中大多数其他滤波函数一样,一些形态学函数内部使用复制边界类型,但是用户可能需要零边界或者填充为1或255的边界。

 

 

 

 

 

 

#include"cv.h" #include"highgui.h" #include "stdio.h" #include "stdlib.h" int main(int argc,char**argv) { printf("%d",sizeof(int)); printf("%d",sizeof(float)); IplImage*src,*dst; float k[9]= {1.0, -2.0, 1.0, 2.0, -4.0 , 2.0, 1.0, -2.0, 1.0 }; CvMat Km; Km=cvMat(3,3,CV_32F,k); src=cvLoadImage(argv[1],1); dst = cvCreateImage(cvSize(src->width+3,src->height+3) ,IPL_DEPTH_8U,3); cvNamedWindow("src",0); cvShowImage("src",src); cvNamedWindow("filtering",0); cvCopyMakeBorder(src,dst,cvPoint(1,1),IPL_BORDER_CONSTANT); cvShowImage("filtering",dst); cvWaitKey(0); cvCopyMakeBorder(src,dst,cvPoint(1,1),IPL_BORDER_REPLICATE); cvShowImage("filtering",dst); cvWaitKey(0); cvReleaseImage(&src); cvReleaseImage(&dst); return 0; }

 

如果认真看的话,可以看得出来:左边的图像边界为1个像素黑色pixel;

右边的与源图像比较像;

 

 

不过我搞不懂,为什么dst图像会变小??????????

 

你可能感兴趣的:(算法,float,border,DST,2010)