OpenCV의 imshow
는 기본적으로 투명 배경 을 검은 색으로 보여주기 때문에,
png 파일의 검은색 글자는 안보임.
이를 위해서는 배경과 전경을 구분하는 mask를 만들고, 배경을 흰색과 같이 원하는 색으로 처리해줘야 함.
Code
다음 코드를 참고.
import cv2
import numpy as np
url = 'https://raw.githubusercontent.com/dsaint31x/OpenCV_Python_Tutorial/master/images/opencv_logo.png'
import requests
t0 = requests.get(url)# requests.models.Response
t1 = t0.content # bytes (immutable)
t2 = bytearray(t1) # bytearray (mutable)
t3 = np.asarray(t2, dtype=np.uint8) #ndarray
img = cv2.imdecode(t3, cv2.IMREAD_UNCHANGED)
cv2.imwrite('opencv_logo.png', img)
print(f'{img.shape=}')
# cv2에서는 투명 배경을 검은색으로 표시하는데, 이 경우 검정색 글자가 안보임.
# 때문에 alpha 채널을 읽어서 투명 배경을 흰색으로 변환.
if len(img) > 3 and img.shape[2] == 4:
bgr = img[:,:,:3]
alpha = img[:,:,3]
w_bg = np.ones_like(bgr, dtype=np.uint8) * 255
mask = alpha[:,:,np.newaxis] / 255.
img0 = bgr*mask + w_bg*(1.-mask)
img1 = cv2.convertScaleAbs(bgr*mask + w_bg*(1-mask))
else:
img1 = img
cv2.imshow('test1', img1)
cv2.waitKey(0)
cv2.destroyAllWindows()
cv2.convertScaleAbs()
위에서 사용된 cv2.convertScaleAbs()
는
$$\text{dst}(i,j) = \text{saturate}(| \alpha \text{src}(i,j) + \beta|)$$
cv2
에서 위의 이미지 연산 후 결과값을uint8
형식으로 변환.
- 절대값 처리
- 밝기($\beta$)와 대비($\alpha$ 조정을 하는데 사용됨.
- saturate는 [0,255]의 범위로 값을 제한한다.
주로 연산으로 처리후 보여주기 직전에 호출되는 함수임 (자동 조정은 아님).
같이보면 좋은 자료들
2024.09.23 - [Programming/DIP] - [DIP] cv2.convertSacleAbs(): contrast, brightness 수동조정
[DIP] cv2.convertSacleAbs(): contrast, brightness 수동조정
cv2.convertScaleAbs()이 함수는 주로 image의 brightness(밝기)와 contrast(대비)를 조절하는데 사용됨.alpha parameter로 contrast를 조절.beta parameter로 brightness를 조절.기본 구문dst = cv2.convertScaleAbs(src[, dst[, alpha[, b
dsaint31.tistory.com
2022.09.21 - [Programming/DIP] - [DIP] opencv에서 URL로 이미지 로딩
[DIP] opencv에서 URL로 이미지 로딩
request 모듈을 활용하면 간단하게 URL에서 이미지 로딩이 된다.reauest로 url을 get메서드로 가져옴.request.content 는 immutable bytes이므로 이를 bytearray로 변경.해당 bytearray 객첼르 통해 ndarray를 얻어냄: 일
dsaint31.tistory.com
2022.09.21 - [Programming/DIP] - [DIP] Color Space or Color Model
[DIP] Color Space or Color Model
Color Space(색 공간)은 "사람의 눈"이 3개의 color에 반응하는 감각세포(cone cell)를 통해 색을 인식하는 것에 기반하여 Tristimulus values (X,Y,Z)와 각각의 color를 연관시키는 방식처럼 "특정 공간의 위치"에
dsaint31.tistory.com
'Programming > DIP' 카테고리의 다른 글
[DIP] Image 다루기: 기본편 1; (Summary) (0) | 2024.09.22 |
---|---|
[DIP] cv2.imwrite (1) | 2024.09.22 |
[CV] cv2.imread() (4) | 2024.09.16 |
[DIP] plt.imshow: matplotlib.pyplot (1) | 2024.09.16 |
[DIP] cv2.imshow 사용예 (2) | 2024.09.16 |