(주) 글을 읽기 전에
이 글은 저와 같은 OpenCV초보자를 위해서 정리하는 것입니다.
전문가시라면 굳이 읽을 필요가 없습니다.
공부하면서 정리하는 글이라서 서툰 부분이 많이많이 보입니다.
이번에는 이미지 마스킹을 수행합니다.
마스킹이라는 것은 한장의 이미지에서 원하는 부분만을 추출해 내는 역활을 합니다.
이것은 앞서의 이미지 추출과는 조금 틀립니다.
이미지 추출은 정해진 영역에서 그냥 추출해 내는 것이고
마스킹은 필요없는 정보를 걸러내어서 원하는 이미지를 찾는 것입니다.
마스킹을 한다면 당연히 AND연산입니다.
OpenCV에서는 And연산을 2가지 종류로 제공해 줍니다.
cvAnd와
cvAndS입니다. 끝에 S가 붙어 있다는 점이 틀린것 이외에도 두 함수의 차이는
전자는 이미지와 이미지를 대상으로 하지만, 후자는 이미지와 Scalar값을 대상으로 한다는 점이 틀립니다.
일단 이번에는 cvAnd를 가지고 하여 보도록 하겠습니다.
코드는 갈수록 단순해지네요..
프로젝트 따라서 필요한 기능을 찾아가면서 정리하는 거라.. 복잡한 쪽으로 이동하지 않고 단순한 쪽으로 이동해서 그렇습니다.
===========
#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);
// Mask Iamge읽기
IplImage * imgB = cvLoadImage("4390m1.jpg", 1);
// 대상 이미지 확정
IplImage *imgC = cvCreateImage( cvGetSize(imgA) ,
IPL_DEPTH_8U, 3);
cvAnd(imgA,imgB,imgC,0);
////////////////////////////////////////////////////////////
cvSaveImage( "image_result.jpg", imgC);
cvNamedWindow("Masked Image",0);
cvShowImage("Masked Image",(CvArr*)imgC);
cvWaitKey(0);
cvDestroyWindow("Masked Image");
cvReleaseImage( &imgA );
cvReleaseImage( &imgB );
cvReleaseImage( &imgC );
return 0;
}
결과 이미지는 아래에 올려둡니다.
'Computer Vision' 카테고리의 다른 글
Rob Hess의 SIFT [6] (0) | 2009.04.18 |
---|---|
OpenCV - Convert Image (0) | 2009.04.11 |
OpenCV - Extract (2) | 2009.03.12 |
OpenCV - Image Rotation & Scale (0) | 2009.03.10 |
Rob Hess의 SIFT [5] (2) | 2009.03.02 |