관리 메뉴

코코야이야기

[c++] OpenCV 사진명암조절2 본문

프로그래밍/OpenCV

[c++] OpenCV 사진명암조절2

코코야 2015. 7. 1. 14:00
반응형

소스코드

//사진 명암 조절, 함수를 사용하지 않고

#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
Comments