【问题标题】:Convert an image between PIL to Cv2 Python 3.6.3将 PIL 之间的图像转换为 Cv2 Python 3.6.3
【发布时间】:2017-12-11 21:22:34
【问题描述】:

如何将图像从 PIL 传递到 cv2 而无需保存和重新加载?

import cv2
import numpy as np
from PIL import Image

img = Image.open('path/to/pic.jpg')
#modify picture using PIL
img.save('path/to/pic.jpg')
img = cv2.imread("pic.jpg")

【问题讨论】:

    标签: python image python-imaging-library cv2


    【解决方案1】:

    以下内容适用于Python 3.7.3

    from PIL import Image
    from cv2 import cvtColor, COLOR_BGR2RGB
    from numpy import array
    
    # get the image path
    img_path = 'images/test.jpg'
    img_rgb = cvtColor(array(Image.open(img_path)), COLOR_BGR2RGB)
    

    【讨论】:

      【解决方案2】:

      您可以访问 bytes 并构造您的 numpy 数组(cv2 在内部也使用 numpy 来存储它们的数据)。

      def imageToNumpy():
          with Image.open('dark.jpg') as img:         
              nparray = np.fromstring(img.tobytes(), dtype=np.uint8)
              nparray = nparray.reshape((img.size[1], img.size[0], img.layers))  
          return nparray
      
      
      cv2.imwrite("testme.png", imageToNumpy() )
      

      【讨论】:

        【解决方案3】:

        使用tempfile

        未经测试的代码:

        temp_file = TemporaryFile()
        with open('path/to/pic.jpg', 'wb') as f:
           temp_file.write(f)
           temp_file.seek(0)
        
        pil_img = Image.open(temp_file)
        cv_img = cv2.imread(temp_file)
        

        【讨论】:

          猜你喜欢
          • 2021-12-09
          • 1970-01-01
          • 2021-08-12
          • 2014-05-21
          • 2015-12-31
          • 1970-01-01
          • 1970-01-01
          • 2012-03-02
          • 2016-05-29
          相关资源
          最近更新 更多