반응형

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
#include <opencv/cv.h>
#include <opencv/highgui.h>
 
int main() {
    IplImage *image, *mulImage, *divImage, *tmpImage;
 
    // 흑백은 left01.jpg , 컬러는 aero1.jpg
    image = cvLoadImage("D:/opencv/sources/samples/data/left01.jpg"-1);
 
    cvNamedWindow("Ori Image", CV_WINDOW_AUTOSIZE);
    cvNamedWindow("Mul Image", CV_WINDOW_AUTOSIZE);
    cvNamedWindow("Div Image", CV_WINDOW_AUTOSIZE);
 
    tmpImage = cvCreateImage(cvGetSize(image), IPL_DEPTH_8U, 1);
    mulImage = cvCreateImage(cvGetSize(image), IPL_DEPTH_8U, 1);
    divImage = cvCreateImage(cvGetSize(image), IPL_DEPTH_8U, 1);
 
    // tmpImage를 1로 채워야 곱셈이 가능하다.
    cvSet(tmpImage, cvScalarAll(1), NULL);
    cvMul(image, tmpImage, mulImage, 1.5);
    cvMul(image, tmpImage, divImage, 1./ 2.0);
 
    cvShowImage("Ori Image", image);
    cvShowImage("Mul Image", mulImage);
    cvShowImage("Div Image", divImage);
 
    cvWaitKey(0);
 
    cvReleaseImage(&image);
    cvReleaseImage(&mulImage);
    cvReleaseImage(&divImage);
 
    return 0;
}
cs


cvMul은 인자가 src1, src2, dst, scale로 dst = src1 * src2 * scale 를 수행하게 된다.


따라서 우리가 mul할 이미지를 src1에 두고 이미지 전체가 픽셀값 1로 채워진 tmpImage를 만들어 1.5를 곱하거나 나누면 해당하는 결과값을 얻을 수 있다.


tmpImage에 쓰인 cvSet는 arr, value, mask가 인수로 각각 들어간다.


이때 MUL 1.5을 하면 높은 픽셀값은 더 높아지고 낮은 픽셀값은 곱해도 덜 높아지기에 밝아짐과 동시에 픽셀값이 멀어지고

MUL 0.5를 하면 큰값이 더 많이 낮아지기에 어두워짐과 동시에 픽셀값들이 가까워지게 된다.







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
#include <opencv/cv.h>
#include <opencv/highgui.h>
 
int main() {
    IplImage *original, *modified, *ret;
 
    // 흑백은 left01.jpg , 컬러는 aero1.jpg
    original = cvLoadImage("D:/opencv/sources/samples/data/lena.jpg"-1);
    modified = cvLoadImage("D:/opencv/sources/samples/data/lena_tmpl.jpg"-1);
 
    cvNamedWindow("Original Image", CV_WINDOW_AUTOSIZE);
    cvNamedWindow("Modified Image", CV_WINDOW_AUTOSIZE);
    cvNamedWindow("Result Image", CV_WINDOW_AUTOSIZE);
 
    ret = cvCreateImage(cvGetSize(original), IPL_DEPTH_8U, 3);
    cvSub(modified, original, ret, NULL);
 
    cvShowImage("Original Image", original);
    cvShowImage("Modified Image", modified);
    cvShowImage("Ret Image", ret);
 
    cvWaitKey(0);
 
    cvReleaseImage(&original);
    cvReleaseImage(&modified);
    cvReleaseImage(&ret);
 
    return 0;
}
cs


아래는 변경된 이미지에서 원본이미지 픽셀을 SUB해주면 오른쪽과 같이 다음과 같은 이미지가 나온다.

따라서 이러한 방법을 이용하여 무단 침입자 검출, CCTV에서 무언가 검출되면 응용 할 수 있는 방법으로 이용 할 수 있다.






반응형