반응형
Python, OpenCV에서 슬라이싱을 사용하여 이미지에서 영역 추출
이미지가 있고 여기에서 영역을 추출하고 싶습니다. 이 영역의 왼쪽 상단 모서리와 오른쪽 하단 모서리의 좌표가 있습니다. 그레이 스케일에서는 다음과 같이합니다.
I = cv2.imread("lena.png")
I = cv2.cvtColor(I, cv2.COLOR_RGB2GRAY)
region = I[248:280,245:288]
tools.show_1_image_pylab(region)
나는 그것을 컬러로하는 방법을 알아낼 수 없다. 각 채널 R, G, B를 추출하려고 생각했습니다. 각 채널에서이 영역을 분리하고 다시 합쳐야하지만 더 짧은 방법이 있어야합니다.
OpenCV 및 Matplotlib의 픽셀 순서에는 약간의 차이가 있습니다.
OpenCV는 BGR 순서를 따르는 반면 matplotlib는 RGB 순서를 따릅니다.
따라서 pylab 함수를 사용하여 OpenCV에로드 된 이미지를 표시 할 때 RGB 모드로 변환해야 할 수 있습니다. (나는 쉬운 방법이 있는지 확실하지 않습니다). 아래 방법은 그것을 보여줍니다.
import cv2
import numpy as np
import matplotlib.pyplot as plt
img = cv2.imread('messi4.jpg')
b,g,r = cv2.split(img)
img2 = cv2.merge([r,g,b])
plt.subplot(121);plt.imshow(img) # expects distorted color
plt.subplot(122);plt.imshow(img2) # expect true color
plt.show()
cv2.imshow('bgr image',img) # expects true color
cv2.imshow('rgb image',img2) # expects distorted color
cv2.waitKey(0)
cv2.destroyAllWindows()
참고 : BGR과 RGB 간의 더 나은 변환 방법은 아래 @Amro의 의견을 확인하십시오. img2 = img[:,:,::-1]
. 아주 간단합니다.
이 코드를 실행하고 결과의 차이를 직접 확인하십시오. 아래는 내가 얻은 것입니다.
Matplotlib 사용 :
OpenCV 사용 :
아직 언급되지 않은 2 가지 옵션 :
img[..., ::-1] # same as the mentioned img[:, :, ::-1] but slightly shorter
다용도
cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
반응형
'IT Share you' 카테고리의 다른 글
목록에서 최대 값 가져 오기 (0) | 2021.01.09 |
---|---|
awk에서 배열의 길이를 어떻게 얻을 수 있습니까? (0) | 2021.01.09 |
Netbeans 7.4에서 Derby 데이터베이스를 시작할 수 없습니다. (0) | 2021.01.09 |
시작시 배치 파일 실행 (0) | 2021.01.09 |
Java OutOfMemoryError 이상한 동작 (0) | 2021.01.08 |