使用ROI的方法剪切图像

第一步:将需要剪切的图像图像不部分设置为ROI

cvSetImageROI(src , cvRect(x,y,width,height));

 

第二步:新建一个与需要剪切的图像部分同样大小的新图像

cvCreateImage(cvSize(width,height),IPL_DEPTH,nchannels);

 

第三步:将源图像复制到新建的图像中

cvCopy(src,dst,0);

 

第四步:释放ROI区域

cvResetIamgeROI(src);


只释放显示分配空间的图片指针。


#include <opencv2\opencv.hpp>
#include <iostream>
#include <string>

using namespace cv;
using namespace std;


int main()
{
	Mat img = imread("001.jpg");

	IplImage * src=&(IplImage)img;


	cvSetImageROI(src,cvRect(0,0,0.5*src->width,0.5*src->height));

	IplImage * dst = cvCreateImage(cvSize(0.5*src->width,0.5*src->height),
		IPL_DEPTH_8U,
		src->nChannels);


	cvCopy(src,dst,0);
	cvResetImageROI(src);


	
	cvNamedWindow("操作后的图像",1);
	cvShowImage("操作后的图像",dst);

	waitKey();

	cvDestroyWindow("操作后的图像");

	cvReleaseImage(&dst);

	return 0;
}


运行结果:

使用ROI的方法剪切图像_第1张图片




另外再粘贴一个不错的代码:

#include <cv.h>
#include <cxcore.h>
#include <highgui.h>
#include <stdio.h>
IplImage* src;
IplImage* dst;
int main(int argc , char** argv )
{
   if(argv[1] == NULL)
       return 0;
   else 
  {
	src = cvLoadImage(argv[1],1);
	if(!src)
		fatal_error("unable to load image from %s", argv[1]);
	cvNamedWindow("源图像",1);
	cvShowImage("源图像",src);
	cvSetImageROI(src,cvRect(0,0,0.5*src->width,0.5*src->height));
	dst = cvCreateImage(cvSize(0.5*src->width,0.5*src->height),
			IPL_DEPTH_8U,
			src->nChannels);
	cvCopy(src,dst,0);
	cvResetImageROI(src);
	
	cvNamedWindow("操作后的图像",1);
	cvShowImage("操作后的图像",dst);
	cvDestroyWindow("操作后的图像");
	cvDestroyWindow("源图像");
  }
   cvReleaseImage(&src);
   cvReleaseImage(&dst);
   return 0;
}



你可能感兴趣的:(使用ROI的方法剪切图像)