이미지 연산 목차
이미지 연산
블랜딩
블렌딩
‘블렌딩 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()