閱讀713 返回首頁    go 技術社區[雲棲]


使用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;
}


運行結果:





另外再粘貼一個不錯的代碼:

#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;
}



最後更新:2017-04-03 05:39:40

  上一篇:go 精通css(9)bug和修複bug
  下一篇:go Cocos2d-x中播放背景音樂