이미지를 PIL에서 개방형 CV 형식으로 변환
이미지를 변환하려고 합니다.PIL
로.OpenCV
서식을 정하다사용 중OpenCV 2.4.3
제가 지금까지 시도한 것이 여기 있습니다.
>>> from PIL import Image
>>> import cv2 as cv
>>> pimg = Image.open('D:\\traffic.jpg') #PIL Image
>>> cimg = cv.cv.CreateImageHeader(pimg.size,cv.IPL_DEPTH_8U,3) #CV Image
>>> cv.cv.SetData(cimg,pimg.tostring())
>>> cv.cv.NamedWindow('cimg')
>>> cv.cv.ShowImage('cimg',cimg)
>>> cv.cv.WaitKey()
하지만 이미지가 CV 형식으로 변환되지 않는 것 같습니다.창에 큰 갈색 이미지가 표시됩니다.이미지 변환의 어디가 잘못되고 있습니까?PIL
로.CV
포맷?
또한, 왜 제가 입력해야 합니까?cv.cv
기능에 액세스할 수 있습니까?
사용:
pil_image = PIL.Image.open('Image.jpg').convert('RGB')
open_cv_image = numpy.array(pil_image)
# Convert RGB to BGR
open_cv_image = open_cv_image[:, :, ::-1].copy()
추가 변환을 저장/숨기기 위해 찾을 수 있는 가장 짧은 버전입니다.
pil_image = PIL.Image.open('image.jpg')
opencvImage = cv2.cvtColor(numpy.array(pil_image), cv2.COLOR_RGB2BGR)
URL에서 파일을 읽는 경우:
import cStringIO
import urllib
file = cStringIO.StringIO(urllib.urlopen(r'http://stackoverflow.com/a_nice_image.jpg').read())
pil_image = PIL.Image.open(file)
opencvImage = cv2.cvtColor(numpy.array(pil_image), cv2.COLOR_RGB2BGR)
코드 주석도 작동합니다. 원하는 것을 선택하십시오.
import numpy as np
from PIL import Image
def convert_from_cv2_to_image(img: np.ndarray) -> Image:
# return Image.fromarray(img)
return Image.fromarray(cv2.cvtColor(img, cv2.COLOR_BGR2RGB))
def convert_from_image_to_cv2(img: Image) -> np.ndarray:
# return np.asarray(img)
return cv2.cvtColor(np.array(img), cv2.COLOR_RGB2BGR)
OpenCV 영상에 대한 베개 영상:
cv2_img = np.array(pil_img)
cv2_img = cv2.cvtColor(cv2_img, cv2.COLOR_RGB2BGR)
CV 영상을 Pillow 영상으로 엽니다.
cv2_img = cv2.cvtColor(cv2_img, cv2.COLOR_BGR2RGB)
pil_img = Image.fromarray(cv2_img)
출처: https://medium.com/analytics-vidhya/the-ultimate-handbook-for-opencv-pillow-72b7eff77cd7
다음은 PIL과 Open 사이에서 이미지를 변환하는 두 가지 기능입니다.CV:
def toImgOpenCV(imgPIL): # Conver imgPIL to imgOpenCV
i = np.array(imgPIL) # After mapping from PIL to numpy : [R,G,B,A]
# numpy Image Channel system: [B,G,R,A]
red = i[:,:,0].copy(); i[:,:,0] = i[:,:,2].copy(); i[:,:,2] = red;
return i;
def toImgPIL(imgOpenCV): return Image.fromarray(cv2.cvtColor(imgOpenCV, cv2.COLOR_BGR2RGB));
OpenCV img에서 PIL img으로 변환하면 투명 채널이 손실됩니다.PIL img을 OpenCV img으로 변환하는 동안 cv2.imshow는 표시하지 않지만 save aspng은 정상적으로 결과를 제공하지만 PIL img을 OpenCV img으로 변환하면 투명 채널을 유지할 수 있습니다.
- cv2.imwrite(./"/"+"fileName.png", img);를 호출하여 OpenCV img의 투명한 결과를 내보내고 확인할 수 있습니다.
- 또는 ImgPIL(img).save('test.png', 'PNG')로 이동하여 PIL img을 확인합니다.
언급URL : https://stackoverflow.com/questions/14134892/convert-image-from-pil-to-opencv-format
'programing' 카테고리의 다른 글
파이썬에서 멀티프로세싱 큐를 사용하는 방법은 무엇입니까? (0) | 2023.07.19 |
---|---|
파이썬에서 열거형에 대한 일반적인 관행은 무엇입니까? (0) | 2023.07.19 |
컬러 리소스에서 컬러 인트를 얻으려면 어떻게 해야 합니까? (0) | 2023.07.19 |
Django와 함께 Pylint 사용 (0) | 2023.07.19 |
TypeScript - [후속 속성 선언은 동일한 유형이어야 함] - 동일한 유형 정의에 대한 다중 참조 (0) | 2023.07.19 |