728x90
반응형
지난번엔 이미지를 그냥 crop해서 특정 좌표에 그대로 덮어씌우는 합성이었는데, 오늘은 alpha값 까지 조정해서 합성하는걸 해보도록 하겠다.
import cv2
import numpy as np
# 이미지 읽기
source_image = cv2.imread('/my_dir/source_image.png')
target_image = cv2.imread('/my_dir/target_image.png')
# 관심 영역 좌표와 크기 정의
x, y, w, h = 100, 50, 200, 150 # 원본 이미지에서 자를 영역
# 원본 이미지에서 관심 영역 잘라내기
roi = source_image[y:y+h, x:x+w]
# 마스크 생성
mask = np.zeros((h, w), dtype=np.uint8)
mask[:] = 255
# 대상 이미지의 붙여넣을 위치
paste_x, paste_y = 50, 30
# 대상 이미지의 마스크와 ROI 설정
target_mask = np.zeros_like(target_image)
target_mask[paste_y:paste_y+h, paste_x:paste_x+w] = mask
# 알파 블렌딩을 위한 이미지 준비
roi_alpha = np.zeros((h, w, 4), dtype=np.uint8)
roi_alpha[:, :, :3] = roi
roi_alpha[:, :, 3] = mask
target_roi = target_image[paste_y:paste_y+h, paste_x:paste_x+w]
target_roi_alpha = np.zeros((h, w, 4), dtype=np.uint8)
target_roi_alpha[:, :, :3] = target_roi
target_roi_alpha[:, :, 3] = target_mask[paste_y:paste_y+h, paste_x:paste_x+w]
# 블렌딩
alpha = 0.5
blended = cv2.addWeighted(roi_alpha[:, :, :3], alpha, target_roi_alpha[:, :, :3], 1 - alpha, 0)
# 결과 이미지에 합성된 영역 붙여넣기
target_image[paste_y:paste_y+h, paste_x:paste_x+w] = blended
# 결과 이미지 저장 및 보기
cv2.imwrite('/my_dir/result_image.jpg', target_image)
cv2.imshow('Result Image', target_image)
cv2.waitKey(0)
cv2.destroyAllWindows()
오늘은 여기까지
728x90
반응형
'OpenCV' 카테고리의 다른 글
[OpenCV] 이미지 처리 (자동보정) (0) | 2024.08.17 |
---|---|
[OpenCV] 이미지 처리 (모자이크 & 블러) (0) | 2024.08.17 |
[OpenCV] 이미지 처리 (합성1) (0) | 2024.08.17 |
[OpenCV] 이미지 처리 (crop) (0) | 2024.08.17 |
[OpenCV] 이미지 처리 (resize) (0) | 2024.08.17 |