관리 메뉴

코코야이야기

[c++] OpenCV 두이미지합성2 본문

프로그래밍/OpenCV

[c++] OpenCV 두이미지합성2

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

소스코드

//두이미지 합치기 , 함수사용x, 두이미지의 크기가 같아야만 가능

#include <highgui.h>
#include <cv.h>

void main()
{
 IplImage *sum_image=0, *image1=0, *image2=0;
 uchar *sum_data, *data1, *data2;
 int height1, width1, channels1;
 int i, j;

 //이미지 생성
 image1=cvLoadImage("배경.jpg", -1);
 image2=cvLoadImage("test.jpg", -1);
 sum_image = cvCreateImage( cvGetSize(image1), 8, 3);
 
 //데이터 정보 저장
 data1 = (uchar *)image1->imageData;
 data2 = (uchar *)image2->imageData;
 sum_data = (uchar *)sum_image->imageData;
 height1 = image1->height;
 width1 = image1->width;
 channels1 = image1->nChannels;
 
 //영상 더하기
 for(i=0;i<height1*channels1;i++)
 {
  for(j=0;j<width1;j++)
  {
   if(data1[i*width1 + j] + data2[i*width1 + j]<=255)
    sum_data[i*width1 + j] = data1[i*width1 + j] + data2[i*width1 + j];
   else
    sum_data[i*width1 + j]=255;
  }
 }
 //두 영상의 픽셀의 더한값이 255를 넘어갈 경우 최대값이 255이 되도록 만들어야 오류가 발생하지 않음. 8비트(0~255)로 데이터를 표시하고 있기때문에 그이상이 되면 안됨.


 cvNamedWindow("Image 1", CV_WINDOW_AUTOSIZE);
 cvNamedWindow("Image 2", CV_WINDOW_AUTOSIZE);
 cvNamedWindow("Sum Image", CV_WINDOW_AUTOSIZE);
 cvShowImage("Image 1", image1);
 cvShowImage("Image 2", image2);
 cvShowImage("Sum Image", sum_image);

 cvWaitKey(0);

 cvReleaseImage(&image1);
 cvReleaseImage(&image2);
 cvReleaseImage(&sum_image);
}

 

 

 

 

출력영상 

 

반응형

'프로그래밍 > OpenCV' 카테고리의 다른 글

[c++] OpenCV 도형그리기2  (0) 2015.07.04
[c++] OpenCV 도형그리기1  (0) 2015.07.04
[c++] OpenCV 두이미지합성1  (0) 2015.07.02
[c++] OpenCV 사진명암조절2  (0) 2015.07.01
[c++] OpenCV 사진명암조절1  (0) 2015.06.30
Comments