IT Share you

Python, OpenCV에서 슬라이싱을 사용하여 이미지에서 영역 추출

shareyou 2021. 1. 9. 10:51
반응형

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)

참조 URL : https://stackoverflow.com/questions/15072736/extracting-a-region-from-an-image-using-slicing-in-python-opencv

반응형