반응형

 


  

 

α가 0에서 1로 변화함으로써 선형 blend 연산자는 두 개의 이미지들 또는 비디오들 간에 cross disolve을 실행하는데 사용되어 질 수 있다. 두 장의 이미지가 α값에 따라 다르게 서로 겹쳐서 보이는 것을 볼 수 있다.

 

 

실행시킨 후.. 키보드를 누를 때마다 alpha값을 0.1씩 증가시켜서 첫번째 사진에서 두번째 사진으로 변화하는 과정을 보여준다.

  1. #include <opencv2/opencv.hpp>  
  2. #include <iostream>  
  3.     
  4. using namespace cv;  
  5. using namespace std;  
  6.     
  7.     
  8. int main( int argc, char **argv )  
  9. {  
  10.     double alpha, beta;  
  11.     Mat src1, src2, dst;  
  12.     
  13.     for( alpha=0.0; alpha<=1.0; alpha+=0.1 )  
  14.     {  
  15.         src1 = imread( "1.jpg" );  
  16.         src2 = imread( "2.jpg" );  
  17.     
  18.         namedWindow("Linear Blend", WINDOW_AUTOSIZE );  
  19.         beta = 1.0-alpha;  
  20.     
  21.         addWeighted( src1, alpha, src2, beta, 0.0, dst );  
  22.         imshow( "Linear Blend", dst );  
  23.     
  24.         waitKey(0);  
  25.     }  
  26. }  

 

참고

http://docs.opencv.org/doc/tutorials/core/adding_images/adding_images.html#adding-images

반응형

포스트 작성시에는 문제 없었지만 이후 문제가 생길 수 있습니다.
질문을 남겨주면 가능한 빨리 답변드립니다.

여러분의 응원으로 좋은 컨텐츠가 만들어집니다.
지금 본 내용이 도움이 되었다면 유튜브 구독 부탁드립니다. 감사합니다 ~~

유튜브 구독하기


제가 쓴 책도 한번 검토해보세요 ^^

  1. 초보자 2016.12.12 17:55

    질문이있습니다 !코드를 보는도중
    dst 에 무슨값이들어가는지 모르겠습니다 ㅠㅠ

    • Favicon of https://webnautes.tistory.com BlogIcon webnautes 2016.12.12 17:57 신고

      src1과 src2 이미지의 투명도를 조정해서 합친 결과가 dst에 저장됩니다

  2. 질문있습니다. 2017.03.24 19:17

    영상과 이미지를 같이 addWeighted 할 수 없나요?

    • Favicon of https://webnautes.tistory.com BlogIcon webnautes 2017.03.25 02:47 신고

      가능합니다..

      일정시간마다 카메라로부터 가져온 이미지를 화면에 뿌려주어서 영상처럼 보이게 하는 거라서..

      화면에 영상을 보여주기전에 처리해주면 될겁니다.

  3. 강경모 2018.05.29 15:24

    안녕하세요 크기가 다른 영상 두개를 각각 frame1 , frame2 에 저장해서 frame1 캐니 엣지 검출한 것과 frame2 grayscale 한것을 cvaddWeighted 함수로 합치고 싶습니다.

    Mat frame1, frame2, edge, gray, result;
    namedWindow("frame1",WINDOW_AUTOSIZE);
    namedWindow("frame2", WINDOW_AUTOSIZE);

    VideoCapture cap1;
    VideoCapture cap2;

    cap1.open("sample1.mp4");
    cap2.open("sample.mp4");

    if (!cap1.isOpened()) {
    cerr << "ERROR! Unable to open camera\n";
    return -1;
    }
    if (!cap2.isOpened()) {
    cerr << "ERROR! Unable to open camera\n";
    return -1;
    }

    cout << "Start grabbing" << endl
    << "Press any key to terminate" << endl;


    for (int i=0;i<10000;i++)
    {
    // wait for a new frame from camera and store it into 'frame'
    cap1.read(frame1);
    cap2.read(frame2);
    Canny(frame1, edge, 0, 210);
    threshold(edge, edge, 0, 255, CV_THRESH_BINARY_INV);
    cv::cvtColor(frame2, gray, CV_RGB2GRAY);
    cvAddWeighted(gray, 0.8, edge, 0.4, 0, result);
    //result = 0.8* gray + 0.4 *edge;
    // check if we succeeded
    if (frame1.empty()) {
    cerr << "ERROR! blank frame grabbed\n";
    break;
    if (frame2.empty()) {
    cerr << "ERROR! blank frame grabbed\n";
    break;
    }
    }

    // show live and wait for a key with timeout long enough to show images
    imshow("frame1", frame1);
    if (waitKey(5) >= 0)
    break;
    // show live and wait for a key with timeout long enough to show images
    imshow("frame2", edge);
    if (waitKey(5) >= 0)
    break;
    }
    // the camera will be deinitialized automatically in VideoCapture destructor
    }
    이러한 코딩을 짰는데
    cvaddweighted 안에 들어가는 gray 와 edge를 arr로 변환하는 함수가 없다는 오류가 발생합니다. ㅠ
    도움 부탁드립니다..

+ Recent posts