ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • cvSplit, cvMerge, cvFlip
    Programming/OpenCV 2015. 4. 14. 22:17

    cvSplit()

    void cvSplit(
    	const CvArr* src,
    	CvArr*	     dst0,
    	CvArr*	     dst1,
    	CvArr*	     dst2,
    	CvArr*	     dst3
    );
    다채널(Multi-Channel) 배열을 여러 개의 단채널(Single-Channel) 배열로 반환한다. 
    • src: 원본 영상 
    • dst0, dst1, dst2, dst3: 결과 영상 
    • src 영상의 각 채널을 분할해 단일 채널 영상인 dst0, dst1, dst2, dst3에 저장. 
    • 출력 영상은 입력 영상과 동일한 크기와 데이터 타입을 가진다.
    • 원본 영상이 4보다 작은 개수의 채널을 가질 경우 사용되지 않는 출력 영상에는 NULL을 저장


    cvMerge

    void cvMerge(
    	const CvArr* src0,
    	const CvArr* src1,
    	const CvArr* src2,
    	const CvArr* src3,
    	CvArr*	     dst
    );
    cvSplit() 함수의 반대. 여러 단채널(Single-Channel) 배열들로부터 다시 다채널(Multi-Channel) 배열로 변환한다.
    • src0: 첫 번째 입력 행렬
    • src1: 두 번째 입력 행렬
    • src2: 세 번째 입력 행렬
    • src3: 네 번째 입력 행렬
    • dst: 결과를 저장할 행렬
    • dst는 입력 행렬과 동일한 크기, 동일한 타입, 다만 채널의 개수는 2, 3, 4가 될 수 있다. 사용하지 않을 경우 NULL로 설정한다.


    cvFlip

    void cvFlip(
    	const CvArr* src,
    	CvArr*       dst       = NULL
    	int          flip_mode = 0
    );
    영상을 x축, y축, 또는 양축 모든 방향으로 뒤집는다.
    • src: 원본 영상
    • dst: 결과 영상
    • flip_mode 
        • 0:  x축을 기준으로 뒤집기
        • 양수: y축 기준으로 뒤집기
        • 음수: 양축 모두 뒤집기


    ex)
    #include "cv.h"
    #include "highgui.h"
    
    int main() {
    	IplImage *srcImage;
    	if ((srcImage = cvLoadImage("untitled.jpg")) == NULL)
    		return -1;
    	cvNamedWindow("srcImage", CV_WINDOW_AUTOSIZE);
    	cvShowImage("srcImage", srcImage);
    
    	IplImage* dstB = cvCreateImage(cvGetSize(srcImage), IPL_DEPTH_8U, 1);
    	IplImage* dstG = cvCreateImage(cvGetSize(srcImage), IPL_DEPTH_8U, 1);
    	IplImage* dstR = cvCreateImage(cvGetSize(srcImage), IPL_DEPTH_8U, 1);
    
    	cvSplit(srcImage, dstB, dstG, dstR, NULL);
    
    	IplImage* blue_red = cvCreateImage(cvGetSize(srcImage), IPL_DEPTH_8U, 3);
    	cvMerge(dstB, NULL, dstR, NULL, blue_red);
    	cvNamedWindow("Blue&red", CV_WINDOW_AUTOSIZE);
    	cvShowImage("Blue&red", blue_red);
    
    	IplImage* red = cvCreateImage(cvGetSize(srcImage), IPL_DEPTH_8U, 3);
    	cvMerge(NULL, NULL, dstR, NULL, red);
    	cvNamedWindow("RED", CV_WINDOW_AUTOSIZE);
    	cvShowImage("RED", red);
    
    	IplImage* blue = cvCreateImage(cvGetSize(srcImage), IPL_DEPTH_8U, 3);
    	cvMerge(dstB, NULL, NULL, NULL, blue);
    	cvNamedWindow("BLUE", CV_WINDOW_AUTOSIZE);
    	cvShowImage("BLUE", blue);
    
    	IplImage *copyImageY;
    	copyImageY = cvCreateImage(cvSize(srcImage->width, srcImage->height),
    		IPL_DEPTH_8U, srcImage->nChannels);
    	cvFlip(srcImage, copyImageY, 1);	// y축 뒤집기
    	cvNamedWindow("FlipY", CV_WINDOW_AUTOSIZE);
    	cvShowImage("FlipY", copyImageY);
    
    	IplImage *copyImageX;
    	copyImageX = cvCreateImage(cvSize(srcImage->width, srcImage->height),
    		IPL_DEPTH_8U, srcImage->nChannels);
    	cvFlip(srcImage, copyImageX, 0);	// x축 뒤집기
    	cvNamedWindow("FlipX", CV_WINDOW_AUTOSIZE);
    	cvShowImage("FlipX", copyImageX);
    
    
    	cvWaitKey(0);
    
    	cvReleaseImage(&blue);
    	cvReleaseImage(&red);
    	cvReleaseImage(&blue_red);
    	cvReleaseImage(&dstR);
    	cvReleaseImage(&dstG);
    	cvReleaseImage(&dstB);
    	cvReleaseImage(&srcImage);
    	cvReleaseImage(©ImageY);
    	cvReleaseImage(©ImageX);
    
    	cvDestroyWindow("srcImage");
    	cvDestroyWindow("Blue&red");
    	cvDestroyWindow("FlipY");
    	cvDestroyWindow("FlipX");
    	cvDestroyWindow("RED");
    	cvDestroyWindow("BLUE");
    }
    





    'Programming > OpenCV' 카테고리의 다른 글

    그리기 함수 - 다각형  (0) 2015.04.19
    그리기 함수 - 직선, 사각형, 원, 타원  (0) 2015.04.19
    IplImage 구조체  (0) 2015.04.12
    CvMat 행렬 구조체  (0) 2015.03.27
    기본 데이터 타입  (0) 2015.03.27

    댓글

Designed by Tistory.