图像扩展函数cvCopyMakeBorder的使用

采用opencv库函数进行扩展:

void cvCopyMakeBorder( const CvArr* src, CvArr* dst, CvPoint offset, intbordertype, CvScalar  value=cvScalarAll(0));
注意参数:bordertype:IPL_BORDER_REFLECT ,IPL_BORDER_CONSTANT。

以图像边缘为扩展则采用IPL_BORDER_REFLECT,参数value可以忽略。

以指定的填充颜色扩展采用IPL_BORDER_CONSTANT,则使用value设置填充颜色,不设置默认为黑色。

#include <cv.h>
#include <cxcore.h>
#include <highgui.h>

extern "C"{
#include<stdio.h>
#include<stdlib.h>
}

#define WID 1280
#dedine HIG  800

IplImage *src;
IplImage *extendimg;
IplImage *dst;

int main(int argc,char **argv)
{
	int width=0,height=0;
	int exwidth=0,exheight=0,exchannels=0;
	CvRect zone;

    if(argv[1]==NULL){
		printf("usage:program picture\n");
		return 0;
	}
	   src=cvLoadImage(argv[1],1);//1为读取彩色图,0为强制转化为灰度图,-1为默认读取图像的原通道数。
	   if(!src){
		   printf("can not find files,please check the path...!");
           return 0;
	   }
	   cvNamedWindow("source",1);
	   cvShowImage("source",src);
	   width=src->width;
	   height=src->height;

	   if(width%WID!=0)
		   exwidth=width+WID-width%WID;
	   else
		   exwidth=width;
	   if(height%HIG!=0)
		   exheight=height+HIG-height%HIG;
	   else
		   exheight=height;

	   /*图片扩展*/
	   //exchannels=src->nChannels;
	   exchannels=3;
	   extendimg=cvCreateImage(cvSize(exwidth,exheight),IPL_DEPTH_8U,exchannels);
	   cvCopyMakeBorder(src,extendimg,cvPoint(1,1),IPL_BORDER_CONSTANT,cvScalar(0,0,0));
	   printf("origal:%d*%d\nafter extend:%d*%d\nchannels:%d\n",width,height,exwidth,exheight,extendimg->nChannels);
       cvNamedWindow("externimg",1);
       cvShowImage("externimg",extendimg);
	   while(y_coodinate<exheight){

	            while(x_coordinate<exwidth){

	                  zone=cvRect(x_coordinate,y_coodinate,WID,HIG);
	                  cvSetImageROI(extendimg,zone);
	                  dst=cvCreateImage(cvSize(WID,HIG),IPL_DEPTH_8U,src->nChannels);

	                  cvCopy(extendimg,dst,0);

	                  cvResetImageROI(extendimg);

	                  cvNamedWindow(savename,1);
	                  cvShowImage(savename,dst);
				      x_coordinate=x_coordinate+WID;
                      flag++;
	           }

		   y_coodinate=y_coodinate+HIG;
		   x_coordinate=0;

	   }

	cvWaitKey(0);
	cvReleaseImage(&src);
	cvReleaseImage(&extendimg);
	cvReleaseImage(&dst);

	return 0;
}


你可能感兴趣的:(图像扩展函数cvCopyMakeBorder的使用)