코코야이야기
[c++] OpenCV 사진명암조절2 본문
소스코드
//사진 명암 조절, 함수를 사용하지 않고
#include <highgui.h>
#include <cv.h>
#include <stdio.h>
void main()
{
IplImage* image = 0;
IplImage* bright_image = 0;
IplImage* dark_image = 0;
int height, width, channels, i, j;
uchar *data, *data1, *data2;
image = cvLoadImage("night.jpg",-1);
height=image->height;
width=image->width;
channels=image->nChannels;
data=(uchar*)image->imageData; //data가 uchar* 타입이라 (uchar*)타입으로 강제로 캐스트 해줘야함
//영상만들기
bright_image=cvCreateImage(cvGetSize(image), 8, 3);
dark_image=cvCreateImage(cvGetSize(image),8,3);
data1 = (uchar *)bright_image->imageData;
data2 = (uchar *)dark_image->imageData;
//더하기
for(i=0;i<height*channels;i++)
{
for(j=0;j<width;j++)
{
if(data[i*width+j]>195)
data1[i*width+j]=255;
else
data1[i*width+j]=data[i*width+j]+60;
}
}
//뺴기
for(i=0;i<height*channels;i++)
{
for(j=0;j<width;j++)
{
if(data[i*width+j]<60)
data2[i*width+j]=0;
else
data2[i*width+j]=data[i*width+j]-60;
}
}
//확인
for(i=20150;i<20300;i+=5)
printf("imageData[%d] = %d\t B_imageData[%d] = %d\t D_imageData[%d] = %d\n", i, data[i], i, data1[i], i, data2[i]);
cvNamedWindow("원본",CV_WINDOW_AUTOSIZE);
cvNamedWindow("밝게",CV_WINDOW_AUTOSIZE);
cvNamedWindow("어둡게",CV_WINDOW_AUTOSIZE);
cvShowImage("원본",image);
cvShowImage("밝게",bright_image);
cvShowImage("어둡게",dark_image);
cvWaitKey(0);
cvReleaseImage(&image);
cvReleaseImage(&bright_image);
cvReleaseImage(&dark_image);
}
출력영상
'프로그래밍 > OpenCV' 카테고리의 다른 글
[c++] OpenCV 두이미지합성2 (1) | 2015.07.03 |
---|---|
[c++] OpenCV 두이미지합성1 (0) | 2015.07.02 |
[c++] OpenCV 사진명암조절1 (0) | 2015.06.30 |
[c++] OpenCV 사진흑백변환1 (0) | 2015.06.29 |
[c++] OpenCV 사진정보출력 (0) | 2015.06.27 |