컬러 이미지를 흑백 이미지로 변환하기



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
#include <opencv/cv.h>
#include <opencv/highgui.h>
 
 
void main() {
    IplImage *image;
 
    image = cvLoadImage("D:/study/testimage.jpg"-1);     //이미지 로드
 
    int height = image->height; //이미지 높이
    int width = image->width;    //이미지 너비
    int channels = image->nChannels;    //이미지 채널
    uchar* data = (uchar*)image->imageData; //이미지 픽셀데이터
 
    //컬러영상 -> 흑백영상으로 변환
    //공식 흑백영상 = 0.333*B + 0.333*G + 0.333*R
    for (int h = 0; h < height; h++) {
        for (int w = 0; w < width; w++) {
            double blue = 0.333*data[h*width*channels + w*channels + 0];
            double green = 0.333*data[h*width*channels + w*channels + 1];
            double red = 0.333*data[h*width*channels + w*channels + 2];
 
            int intensity = (int)(blue + green + red);    //각채널의 평균값
 
            for (int c = 0; c < channels; c++) {
                data[h*width*channels + w*channels + c] = intensity;
            }
        }
    }
 
 
    cvNamedWindow("image", CV_WINDOW_AUTOSIZE);    //윈도우 생성
    cvShowImage("image", image);    //윈도우에 이미지 표시
 
 
    cvWaitKey(0);
 
    cvReleaseImage(&image);
}
cs



결과



+ Recent posts