米不是numpy的阵列,无论是标量

问题描述:

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 

我已经得到了以下错误,当我尝试运行我的代码 - 这是我得到的错误:米不是numpy的阵列,无论是标量

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

你有没有读过['docs'](http://docs.opencv.org/2.4/modules/core/doc/operations_on_arrays.html#cv2.split)? – Divakar

你”通常不应该将PIL与numpy一起使用,这些库不会互相影响很多。从numpy(和opencv)的角度来看,图像只是任何给定类型(二维用于灰度,三维用于颜色)的2D或3D array。另外cv2默认使用BGR ...

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

+0

我不会说他们“你通常不应该将PIL与numpy一起使用”--- PIL只是将图像保存为“PIL Image”类型的对象,而numpy则将它们保存为“numpy ndarray”类型的对象。 'np.array()'完美地将图像转换为数组,并且由于PIL支持更多的图像类型(比如'.gif')而不是'OpenCV',并且它是一个相当常见的库,我已经将它们结合使用这里和那里。 –

您应该使用PIL中提供的拆分功能来实现此目的。

Image.split()

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

+0

如果你想坚持使用PIL图像类,那么是的---使用PIL功能。但是由于OP在OpenCV之前发布过一次,也许你可以扩展这个答案,提供一些关于使用OpenCV函数的建议,或者如何使用numpy数组来处理这两个函数。 –