728x90
반응형
단순히 이미지 두개를 겹칠 때는 아래처럼 paste함수로 해주면 된다.
from PIL import Image
image1 = Image.open("./image1.png")
image2 = Image.open("./image2.png")
image1 = image1.resize((500, 500))
image2 = image2.resize((300, 300))
#이미지 1번의 정 중앙에 놓고 싶어서
btsize = tuple(np.subtract(image1.size,image2.size))
new_image = Image.new('RGB',(500, 500), (255,2555,255))
new_image.paste(image1,(0,0))
new_image.paste(image2,(btsize[0]//2, btsize[1]//2))
new_image.save("merged_image.jpg","JPEG")
new_image.show()
근데 난 새로 들어가는 2번 이미지가 랜덤으로 돌아가게끔 설정해놨고,
image2 = image2.resize((300, 300)).rotate(30)
이 상태에서 뒷배경과 합성해놓으니 자꾸 rotation후 생기는 공백(black area)이 거슬린다.
한참 서치 후, 아래에서 다음 방법을 찾을 수 있었다.
관건은 두 이미지를 "RGBA"(transparent 값이 포함되게끔) 형태로 바꾸고,
rotation 함수에 expand값을 넣어 확장 한 후, paste 뒤 mask에 합성할 이미지를 넣어주면 되는 것 같다.
from PIL import Image
import numpy as np
image1 = Image.open("./image1.jpg").convert("RGBA")
image2 = Image.open("./image2.jpg").convert("RGBA")
image1 = image1.resize((500, 500))
image2 = image2.resize((300, 300)).rotate(30, expand=1)
#이미지 1번의 정 중앙에 놓고 싶어서
btsize = tuple(np.subtract(image1.size,image2.size))
new_image = Image.new('RGB',(500, 500), (255,2555,255))
new_image.paste(image1,(0,0))
new_image.paste(image2,(btsize[0]//2, btsize[1]//2), image2)
#new_image.save("merged_image.jpg","JPEG")
new_image.show()
728x90
반응형
'머신러닝 > Computer Vision' 카테고리의 다른 글
[OpenCV] 강좌 참고 사이트 (0) | 2022.03.30 |
---|---|
[PIL] Image.open 이미지가 자동으로 돌아갈 때 / ImageOps.exif_transpose (0) | 2022.03.30 |
OCR 결과 이미지에 그리기(cv2.polyline / pil imagedraw) (0) | 2022.03.17 |
PIL Image open시, png 파일 투명도 손실(검은 이미지) (png pil open, non-transparent, black images) (0) | 2022.02.07 |
PIL Filter sample (0) | 2022.02.03 |