【问题标题】:m is not a numpy array, neither a scalarm 不是 numpy 数组,也不是标量
【发布时间】:2017-09-05 17:02:57
【问题描述】:
import cv2
import numpy as np
from PIL import Image

img = Image.open("test.jpg")

imgfilename = img.filename

imgb,imgg,imgr = cv2.split(img)
count = 0

我在尝试运行代码时遇到以下错误 - 这是我遇到的错误:

 File "WB.py", line 9, in <module>
    imgb,imgg,imgr = cv2.split(img)
TypeError: m is not a numpy array, neither a scalar

【问题讨论】:

    标签: python opencv python-imaging-library pillow cv2


    【解决方案1】:

    您通常不应该将 PIL 与 numpy 一起使用,这些库不会进行很多交互。

    从 numpy(和 opencv)的角度来看,图像只是任何给定类型的 2D 或 3D arrays(灰度为 2D,彩色为 3D)。同样cv2 默认使用 BGR...

    cv2.imread(path, cv2.IMREAD_COLOR) 开头,而不是Image.open(path)

    【讨论】:

    • 我不会说他们“你通常不应该将 PIL 与 numpy 一起使用” --- PIL 只是将图像作为PIL Image 类型的对象保存,而 numpy 将它们作为对象保存numpy ndarray 类型。 np.array(&lt;PIL image&gt;) 完美地将图像转换为数组,并且由于 PIL 支持比 OpenCV 更多的图像类型(例如.gif)并且是一个非常常见的库,所以我在这里和那里结合使用它们。跨度>
    【解决方案2】:

    为此,您应该使用PIL 中提供的拆分功能。

    Image.split()

    这是因为图像在 OpenCV 和 PIL 中的解释不同。因此,您不能将这些包中可用的功能互换。

    【讨论】:

    • 如果你想坚持使用 PIL 图像类,那么可以——使用 PIL 函数。但是,由于 OP 之前已经发布过一次关于 OpenCV 的信息,也许您可​​以通过一些关于使用 OpenCV 函数的建议来扩展这个答案,或者如何使用 numpy 数组在两者之间工作。
    猜你喜欢
    • 2020-04-01
    • 2018-12-18
    • 1970-01-01
    • 2018-01-08
    • 2018-04-24
    • 2018-02-02
    • 1970-01-01
    • 1970-01-01
    • 2018-02-18
    相关资源
    最近更新 更多