programing

이미지를 PIL에서 개방형 CV 형식으로 변환

newsource 2023. 7. 19. 21:22

이미지를 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