Steady Blog
1장 OpenCV PointProcessing -1 본문
#include "opencv2/opencv.hpp"
//Gray로 변환
int main()
{
//파일로 부터 이미지를 얻기 위한 객체 -> 성공할 경우 IplImagePointer 반환
// -> 실패할 경우 NULL return
IplImage * img;
img = cvLoadImage("C:/Image/Gray_Test.jpg");
cvNamedWindow("test");
//이미지를 지정된 window에 나타냄
cvShowImage("test", img);
//사용자가 키를 누르기를 정해진 대기시간 만큼 기다린다.
cvWaitKey();
int x, y;
for (x = 0; x<img->width; x++)
for (y = 0; y<img->height; y++)
{
//색을 저장하는 데 사용하는 구조체 CvScalar
//CvScalr cvGet2D(IplImage*,y,x)
CvScalar s = cvGet2D(img, y, x);
//RGB 색상을 지정하는 배열이 거꾸로 되어있는게 핵심
int b = s.val[0];
int g = s.val[1];
int r = s.val[2];
//Gray는 각 픽셀마다 RGB가 모두 같은 이미지
int avg = (b + g + r) / 3;
//Gray로 색상을 변경하기 위한 코드
s.val[0] = avg;
s.val[1] = avg;
s.val[2] = avg;
//void cvSet2d(IplImage*,y,x,CvScalar)를 사용해서 색상을 변경
cvSet2D(img, y, x, s);
}
//주어진 이름에 해당하는 윈도우에 이미지를 보여줌
// - 부분적인 출력은 안됨
cvShowImage("test", img);
//사용자가 키를 누르기를 정해진 대기시간 만큼 기다린다.
cvWaitKey();
//주어진 이름에 해당하는 윈도우를 없앰
cvDestroyWindow("test");
//저장하고 있던 메모리 해제
cvReleaseImage(&img);
}
결과 값
===>
<변경 전> <변경 후>