두 이미지 합성하기(뺄셈 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이므로 백그라운드의 흰색부분은 검은색으로 보이고 검은색 부분은 그대로 보인다
'IT > - 프로그래밍' 카테고리의 다른 글
OpenCV 이미지 반전하기 (cvNot 함수) (0) | 2017.04.13 |
---|---|
안드로이드 FloatingActionButton 사용하기 (1) | 2017.04.12 |
OpenCV 두 이미지 합성하기(덧셈 cvAdd 함수) (1) | 2017.04.10 |
OpenCV 이미지를 선명하게 하기(cvMul 함수) (0) | 2017.04.07 |
OpenCV 이미지를 밝게, 어둡게하기 (0) | 2017.04.06 |