본문 바로가기

개발/OpenCV

카메라 영상에 실시간 Logo 이미지 합성

728x90
반응형
OpenCV 카메라 영상 logo 이미지 출력

 

 

카메라 영상 이미지에 logo 이미지를 합성하려면 이미지 별로 가중치를 두고 합성을 해야 정상적으로 이미지가 출력 됩니다.

 

이미지에 가중치를 두어 합성(산술연산)을 하는 함수입니다.

 

CV_EXPORTS_W void addWeighted(InputArray src1, double alpha, InputArray src2,
                              double beta, double gamma, OutputArray dst, int dtype=-1);

 

src1

첫번째 영상입니다.(cv::Mat)

alpha

첫번째 영상의 가중치입니다.

2개 영상의 가중치의 합은 1 입니다.

src2

두번째 영상입니다.(cv::Mat)

beta

두번째 영상의 가중치입니다.

gamma

연산 결과에 가감할 상수입니다(일반적으로 0 사용)

dst

연산이 완료된 결과 영상입니다(cv::Mat)

 

 

 

카메라 영상에 logo 이미지 합성 실습

 

#include <opencv2/opencv.hpp>
......

// RTSP Stream Url 로 카메라 영상 가져오기
cv::VideoCapture cap(onvif_controller_->GetStreamUrl());
if (cap.isOpened() == false)
    return ;

// 영상 사이즈 확인
cv::Size size = cv::Size((int)cap.get(cv::CAP_PROP_FRAME_WIDTH), (int)cap.get(cv::CAP_PROP_FRAME_HEIGHT));
cv::Mat mat;
cap.read(mat);

// logo 이미지 불어오기, 사이즈 확인
cv::Mat logo = cv::imread(csCaptureLogo);
int nWidth = logo.size().width;
int nHeight = logo.size().height;

// logo 이미지가 영상에 합성될 위치 지정
cv::Rect pos = cv::Rect(20, size.height - 63, nWidth, nHeight);

// logo 이미지 와 영상의 가중치를 설정하여 합성
cv::addWeighted(mat(pos), 0.5, logo, 0.5, 0, mat(pos));

// 이미지 캡쳐
if (cv::imwrite("capture\\" + strText + ".png", mat) == false)
    return ;

cv::waitKey();
cap.release();

 

 

카메라 영상에 log 이미지 합성 결과

 

 

Text 입력 및 Logo 이미지를 합성하여 캡쳐한 이미지 입니다.

우측 하단이 Text, 좌측 하단이 logo 이미지 입니다.

(이미지의 특정 문구는 블러 처리 하였으니 참고 바랍니다.)

 

 

주의할 점

 

logo 이미지에 Black(0,0,0) 의 색상이 존재하는 부분이 인식되지 않아 이미지가 표시되지 않아 카메라 영상으로 표시되어 정상적으로 이미지가 출력 되지 않을 수 있으니 주의 바랍니다.

 

 

728x90

'개발 > OpenCV' 카테고리의 다른 글

카메라 영상에 실시간 Text 넣기(합성 및 출력)  (0) 2023.02.03