로드 시 색상이 지정된 이미지에 잘못된 색상을 부여하는 CV 열기
Python OpenCV에서 컬러 이미지를 로드하고 있습니다.하지만, 제가 받은 이미지는 색깔이 모두 섞여 있습니다.
코드는 다음과 같습니다.
import cv2
import numpy as np
from numpy import array, arange, uint8
from matplotlib import pyplot as plt
img = cv2.imread('lena_caption.png', cv2.IMREAD_COLOR)
bw_img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
images = []
images.append(img)
images.append(bw_img)
titles = ['Original Image','BW Image']
for i in xrange(len(images)):
plt.subplot(1,2,i+1),plt.imshow(images[i],'gray')
plt.title(titles[i])
plt.xticks([]),plt.yticks([])
plt.show()
원본 이미지는 다음과 같습니다.
그리고 다음은 플롯된 이미지:
OpenCV는 이미지의 기본 색상 순서로 BGR을 사용하고, matplotlib은 RGB를 사용합니다.OpenCv가 로드된 영상을 matplotlib에 표시하면 채널이 다시 앞쪽으로 이동합니다.
이 문제를 해결하는 가장 쉬운 방법은 그레이스케일 이미지를 만들 때처럼 OpenCV를 사용하여 RGB로 다시 명시적으로 변환하는 것입니다.
RGB_img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
그리고 그것을 당신의 줄거리에 사용하세요.
이전 답변에 대한 대안으로 다음을 사용할 수 있습니다(약간 더 빠름).
img = cv2.imread('lena_caption.png')[...,::-1]
%timeit [cv2.cvtColor(cv2.imread(f), cv2.COLOR_BGR2RGB) for f in files]
231 ms ± 3.08 ms/루프(1987 ± 표준).dev. 7회 주행, 각 루프 1회)
%timeit [cv2.imread(f)[...,::-1] for f in files]
루프당 220 ms ± 1.81 ms(209 ± 표준시).dev. 7회 주행, 각 루프 1회)
단순한 한 줄 솔루션
np.flip(img, axis=-1)
이것은 양쪽 모두를 변환할 수 있습니다.RGB에서 BGR로, 그리고 BGR에서 RGB로.
영상을 읽은 후 행렬을 오른쪽에서 왼쪽으로 읽어 bgr 행렬의 순서를 rgb로 되돌립니다.
x = cv2.imread('./image.jpg')
x=x[:,:,::-1]
plt.imshow(x)
어두운 모드에서 PyCharm을 사용하는 경우 BGR에서 RGB로 변경하는 것만으로는 충분하지 않다는 것을 알게 될 것입니다.이는 PyCharm에 "어두운 테마에 대한 이미지 출력 반전"이라는 설정이 있기 때문입니다.
기본 설정 비활성화 | 언어 및 프레임워크 | 주피터 | 어두운 테마에 대한 이미지 출력 반전이 도움이 될 것입니다.
영상 반전이 켜져 있습니다.
영상 반전이 OFF입니다.
코드는 두 예에서 모두 동일합니다.PyCharm의 설정만 다릅니다.
cv2도 시도해 볼 수 있습니다.IMREAD_변경되지 않음().IMREAD_COLOR와 어떻게 다른지 보려면 여기를 더 참조하십시오.
https://www.geeksforgeeks.org/python-opencv-cv2-imread-method/
OpenCV를 사용하여 영상을 읽으려고 하면 BGR이 기본값으로 사용됩니다.따라서 이미지를 읽으려면 다른 접근 방식을 사용해야 합니다.원하는 출력을 얻기 위해 아래와 같이 코드를 변경했습니다.
import cv2
import numpy as np
from numpy import array, arange, uint8
from matplotlib import pyplot as plt
img = cv2.cvtColor(cv2.imread('lena_caption.png'), cv2.COLOR_BGR2RGB)
bw_img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
images = []
images.append(img)
images.append(bw_img)
titles = ['Original Image','BW Image']
for i in xrange(len(images)):
plt.subplot(1,2,i+1),plt.imshow(images[i],'gray')
plt.title(titles[i])
plt.xticks([]),plt.yticks([])
plt.show()
출력:
언급URL : https://stackoverflow.com/questions/39316447/opencv-giving-wrong-color-to-colored-images-on-loading
'programing' 카테고리의 다른 글
시드 가능한 JavaScript 난수 생성기 (0) | 2023.09.01 |
---|---|
Powershell 비위치, (0) | 2023.09.01 |
"실행 중인 스크립트가 이 시스템에서 비활성화됨"을 수정하는 방법은 무엇입니까? (0) | 2023.09.01 |
중첩된 사전 및 목록에서 키의 모든 항목 찾기 (0) | 2023.09.01 |
TSQL에서 날짜로부터 분기별 캘린더를 가져오는 방법 (0) | 2023.09.01 |