두 이미지 합성하기(뺄셈 cvSub 함수)



c++)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
#include <opencv/cv.h>
#include <opencv/highgui.h>
 
 
void main() {
 
    IplImage *srcImage1, *srcImage2, *resultImage = 0;
 
    srcImage1 = cvLoadImage("D:/study/Lena.jpg"-1);
    srcImage2 = cvLoadImage("D:/study/background.jpg"-1);
 
 
 
    //두영상의 덧셈, 뺄셈, 곱셈, 나눗셈을 이용하여 이미지 합성이나 특수효과가 가능하다
    //이미지객체 생성
    resultImage = cvCreateImage(cvGetSize(srcImage1), IPL_DEPTH_8U, 3);
    //cvSub(첫번째 소스이미지, 두번째 소스이미지, 결과이미지, 마스크) : 두 이미지 더하기
    cvSub(srcImage1, srcImage2, resultImage, NULL);
 
    
    //함수 사용하지 않고 픽셀을 직접 계산했을때
    /*
    int width = srcImage1->width;
    int height = srcImage2->height;
    int channels = srcImage1->nChannels;
    uchar *srcData1 = (uchar*)srcImage1->imageData;
    uchar *srcData2 = (uchar*)srcImage2->imageData;
    uchar *resultData = (uchar*)resultImage->imageData;
    int temp = 0;
    for (int h = 0; h < height; h++) {
        for (int w = 0; w < width; w++) {
            for (int c = 0; c < channels; c++) {
                int index = h*width*channels + w*channels + c;
                //두 픽셀값을 뺀다
                temp = srcData1[index] - srcData2[index];
                if (temp < 0)
                    resultData[index] = 0;
                else
                    resultData[index] = temp;
            }
        }
    }
    */
 
 
    //create window
    cvNamedWindow("source image", CV_WINDOW_AUTOSIZE);
    cvNamedWindow("background image", CV_WINDOW_AUTOSIZE);
    cvNamedWindow("result image", CV_WINDOW_AUTOSIZE);
    //show window
    cvShowImage("source image", srcImage1);
    cvShowImage("background image", srcImage2);
    cvShowImage("result image", resultImage);
 
    cvWaitKey(0);
 
    //release image
    cvReleaseImage(&srcImage1);
    cvReleaseImage(&srcImage2);
    cvReleaseImage(&resultImage);
}
cs



결과

흰색이 255, 검색은이 0이므로 백그라운드의 흰색부분은 검은색으로 보이고 검은색 부분은 그대로 보인다



+ Recent posts