OpenCVα채널을 포함하는 pg 그림을 읽을 때 주의사항

3716 단어 pngnumpyOpenCVPython

개시하다


파이썬의 이미지 처리 번은 OpenCV나 PIL이죠.
이번에는 오픈CV에서 PNG 이미지를 처리할 때 아무리 해도 제대로 작동하지 않는 경우가 있어 메모로 작성했다.
겸사겸사 말씀드리겠습니다.α통로는 투명한 부분이다.

요약


αcv2.imread(img)로 채널이 포함된 png을 읽을 때α채널이 삭제됩니다.
α채널cv2.imread(frame, -1)도 읽고 싶으면 -1을 매개 변수에 넘기세요.
오픈cv의 전각 문자 비대응 대책으로 numby로 읽은 후 변환된 것은α채널 포함입니다.
오픈cv로 애니메이션을 쓸 때.α채널이 포함되면 안 돼요.

본문


현재 영상으로 영상을 만들고 있습니다.
내 환경에서 폴더에 전각 문자를 사용하기 때문에 일반 cv2.imread(img) 경로에서 반각 문자만 사용할 수 있기 때문에 그림을 읽을 수 없습니다.
대책으로 이렇게 넘비로 읽은 뒤 RGB의 순서를 변경하는 방법이 있다.cv2.imread(img)numby의ndaray로 그림을 처리하기 때문입니다.
import cv2
import numpy as np
buf = np.fromfile(img_path, np.uint8)
img = cv2.imdecode(buf, cv2.IMREAD_UNCHANGED)
그런데 문제가 있어요. cv2.imread(img) 중 png의α채널 읽기 삭제, 위 코드는α채널로 읽기.
구체적으로 높이 720과 너비 528의 그림을 읽을 때cv2.imread(img)에서 (720, 528, 3)의 사이즈로 배열(3은 RGB)

위의 코드로 읽으면 (720528,4) 크기 배열이 표시됩니다.(4 예)αRGB)

더 문제는 오픈cv에서 애니메이션을 만들 때 이미지가 RGB이어야 한다는 것이다.
따라서 numby로 읽은 다음α채널을 삭제해야 합니다.
더 심각한 문제는, pngα채널이 포함된 것과 채널이 없는 것이 있다.
여기에 더해서 전각 경로의 pg를 읽고 RGB로 변환하는 코드가 여기에 있다.
buf = np.fromfile(frame, np.uint8)
img = cv2.imdecode(buf, cv2.IMREAD_UNCHANGED)
if img.shape[2] == 4:
    img = np.delete(img, 3, axis=2)

총결산


opencv는 편리하지만, 다른 한편, 전각 문자를 지원하지 않는 것이 가장 큰 약점

좋은 웹페이지 즐겨찾기