(주) 글을 읽기 전에
이 글은 저와 같은 OpenCV초보자를 위해서 정리하는 것입니다.
전문가시라면 굳이 읽을 필요가 없습니다.
공부하면서 정리하는 글이라서 서툰 부분이 많이많이 보입니다.
이미지에서 특정 부분 추출하기
cvCopy(
const CvArr * src,
CvArr * dst,
const CvArr * mask = NULL
);
이것은 원본과 복사 대상이 같은 크기와 , 같은 타입의 이미지라는 전제하에서 이루어 집니다.
이미지의 크기가 틀리다면, 다음 함수를 써서 원본의 이미지중에 일부를 추출할 수 있습니다.
void cvSetImageROI( IplImage* image, CvRect rect );
CvRect는 사각형 영역을 설정하는 것입니다.
cvRect는 다음과 같이 정의되어 있습니다.
typedef struct CvRect
{
int x; /* x-coordinate of the left-most rectangle corner[s] */
int y; /* y-coordinate of the top-most or bottom-most
rectangle corner[s] */
int width; /* width of the rectangle */
int height; /* height of the rectangle */
}
CvRect;
그럼 이제 이미지를 복사하여 만들어 보는 것을 해보겠습니다.
소스는 간단해서 그닥 어려운 부분이 없습니다.
원본에서 ROI를 지정한 뒤에 복사하면 잘 됩니다.
--------------------------------------------------------------------------------
#include <stdio.h>
#include <unistd.h>
#include <string.h>
#include <errno.h>
#include <opencv/cv.h>
#include <opencv/highgui.h>
#define IMG_WIDTH 400
#define IMG_HEIGHT 400
int main(int argc , char *argv[]){
// 이미지 읽기
IplImage *imgA = cvLoadImage( "4390m.jpg", 1);
// 대상 이미지 확정
IplImage *imgB = cvCreateImage( cvSize(IMG_WIDTH ,IMG_HEIGHT ),
IPL_DEPTH_8U, 3);
// ROI를 설정한다.
cvSetImageROI( imgA , cvRect(200,200,IMG_WIDTH,IMG_HEIGHT ));
// 이미지를 복사한다.
cvCopy(imgA,imgB,0);
////////////////////////////////////////////////////////////
cvSaveImage( "image_result.jpg", imgB);
cvNamedWindow("Extract Image",0);
cvShowImage("Extract Image",(CvArr*)imgB);
cvWaitKey(0);
cvDestroyWindow("Extract Image");
cvReleaseImage( &imgA );
cvReleaseImage( &imgB );
return 0;
}
아래 그림은 결과 이미지입니다
'Computer Vision' 카테고리의 다른 글
OpenCV - Convert Image (0) | 2009.04.11 |
---|---|
OpenCV - Image Mask (0) | 2009.03.16 |
OpenCV - Image Rotation & Scale (0) | 2009.03.10 |
Rob Hess의 SIFT [5] (2) | 2009.03.02 |
Rob Hess의 SIFT [4] (0) | 2009.02.25 |