이미지 연산 목차
이미지 연산
블랜딩
블렌딩
‘블렌딩 Blending ’ 2개의 입력 이미지의 투명도를 조정하여 2개의 이미지가 겹쳐보이도록 만드는 것 
 OpenCV는 블렌딩을 위해 addWeighted함수를 제공.
코드
addWeighted(img1, alpha,img2, beta, 0, dst);
다음 수식처럼 작동 
 \(dst = img1*alpha + img2 * beta + gamma\)
상수 alpha와 beta를 가중치로 사용하여 입력 이미지 img1, img2의 투명도를 조정 
 상수가 가질 수 있는 범위
- 0.0~1.0
- 0.0에 가까울 수록 투명한 상태
- 1.0에 가까워질수록 불투명
- gamma는 가중치 합에 추가로 더하는 상수 입니다. 예제 코드는 첫 번째 입력 이미지 (해변) 을 위한 가중치 alpha는 점점 증가시키고,
 두번째 입력 이미지 (고양이) 를 위한 가중치 beta는 점점 감소시킴.
 실행시킨 후 키보드의 아무 키나 누르면 점점 해변 사진은 불투명해지고, 고양이 사진은 투명해짐
 
  
 
C++
# include < opencv2/opencv.hpp> # include < iostream>
using namespace cv;
using namespace std;
int main()
{
  Mat img1, img2;
  double alpha = 0.0;
  double beta = 1.0;
  while(alpha <= 1.0){
  // addWeighted 파라미터 조정 효과를 확인하기 위해 // 루프 시작할 때마다 이미지를 새로 불러옵니다.
  // 블렌딩하는 두 이미지의 크기는 같아야 합니다.
  img1 = imread("beach.png", IMREAD_COLOR);
  img2 = imread("cat.png", IMREAD_COLOR);
    
  // addWeighted함수를 사용하여 블렌딩을 적용합니다.
  Mat dst;
  addWeighted(img1, alpha, img2, beta, 0, dst);
  // 블렌딩을 위해 사용한 파라미터를 확인합니다.
  cout << alpha << " " << beta << endl;
  // 결과 이미지를 화면에 보여줍니다.
  imshow("dst", dst);
  waitKey(0);
  // img1을 위한 가중치 alpha는 0.1씩 증가시키고 // img2를 위한 가중치 beta는 0.1씩 감소시킵니다.
  // img2 이미지는 점점 투명해지고 img1 사진은 점점 불투명해집니다.
  alpha = alpha + 0.1;
  beta = beta - 0.1;
  }
return 0;
}
PYTHON
import cv2 as cv
alpha = 0.0
beta = 1.0
while alpha <= 1.0:
  # addWeighted 파라미터 조정 효과를 확인하기 위해 # 루프 시작할 때마다 이미지를 새로 불러옵니다.
  # 블렌딩하는 두 이미지의 크기는 같아야 합니다.
  img1 = cv.imread('beach.png', cv.IMREAD_COLOR) 
  img2 = cv.imread('cat.png', cv.IMREAD_COLOR)
  # addWeighted함수를 사용하여 블렌딩을 적용합니다.
  dst = cv.addWeighted(img1, alpha, img2, beta, 0)
  # 블렌딩을 위해 사용한 파라미터를 확인합니다.
  print( alpha, " ", beta)
  # 결과 이미지를 화면에 보여줍니다.
  cv.imshow('dst',dst) cv.waitKey(0)
  # img1을 위한 가중치 alpha는 0.1씩 증가시키고
  # img2를 위한 가중치 beta는 0.1씩 감소시킵니다.
  # img2 이미지는 점점 투명해지고 img1 사진은 점점 불투명해집니다.
  alpha = round(alpha + 0.1, 1) 
  beta = round(beta - 0.1, 1)
  
  cv.destroyAllWindows()