OpenCVα채널을 포함하는 pg 그림을 읽을 때 주의사항
개시하다
파이썬의 이미지 처리 번은 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는 편리하지만, 다른 한편, 전각 문자를 지원하지 않는 것이 가장 큰 약점
Reference
이 문제에 관하여(OpenCVα채널을 포함하는 pg 그림을 읽을 때 주의사항), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/yuki_2020/items/b6082be0e609604001f3
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
α
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는 편리하지만, 다른 한편, 전각 문자를 지원하지 않는 것이 가장 큰 약점
Reference
이 문제에 관하여(OpenCVα채널을 포함하는 pg 그림을 읽을 때 주의사항), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/yuki_2020/items/b6082be0e609604001f3
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
import cv2
import numpy as np
buf = np.fromfile(img_path, np.uint8)
img = cv2.imdecode(buf, cv2.IMREAD_UNCHANGED)
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는 편리하지만, 다른 한편, 전각 문자를 지원하지 않는 것이 가장 큰 약점
Reference
이 문제에 관하여(OpenCVα채널을 포함하는 pg 그림을 읽을 때 주의사항), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/yuki_2020/items/b6082be0e609604001f3텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)