【问题标题】:different results when openning an image into numpy array using cv2.imread (OpenCV) and PIL.Image.open (Pillow)使用 cv2.imread (OpenCV) 和 PIL.Image.open (Pillow) 将图像打开到 numpy 数组时的不同结果
【发布时间】:2017-08-12 09:38:22
【问题描述】:

我正在尝试打开一个图像并将其转换为一个 numpy 数组。

我尝试过: 1) cv2.imread 直接给你一个numpy数组 2) 然后 PIL.Image.open 做一个 numpy.asarray 来转换图像对象。

然后我意识到从同一张图片得到的数组是不同的,请看随附的截图。 cv2.imread PIL.Image.open

我希望颜色通道应该始终具有相同的顺序,无论包装如何,但我似乎无法找到任何关于枕头的文档。

还是我只是傻?提前感谢您的任何建议!!!

【问题讨论】:

    标签: opencv pillow


    【解决方案1】:

    我对 PIL 一无所知,但与世界上几乎所有其他系统相反,OpenCV 以 BGR 顺序存储图像,而不是 RGB。这让每个 OpenCV 初学者都大吃一惊,您的示例看起来就是这种情况。

    【讨论】:

    • 我想说它抓住了那些在使用他们不熟悉的函数或库之前懒得阅读文档的人。 IIRC imread 包含注释“在彩色图像的情况下,解码图像的通道将按 B G R 顺序存储。”很长一段时间。
    【解决方案2】:

    OpenCV

    image = cv2.imread(image_path, 1)
    image_cv = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
    

    枕头

    image = Image.open(image_path).convert("RGB")
    image_pillow = numpy.array(image_from_pil)
    

    image_np 等于 image_cv

    注意,在读取 JPEG 图像时,image_np 和 image_cv 可能差别不大,因为 OpenCV 和 Pillow 中的 libjpeg 版本不同。

    【讨论】:

    • 这个简洁明了。
    猜你喜欢
    • 1970-01-01
    • 2018-04-24
    • 1970-01-01
    • 2021-02-23
    • 2021-08-31
    • 2013-01-21
    • 1970-01-01
    • 2011-11-19
    • 1970-01-01
    相关资源
    最近更新 更多