Python 参数“image”必须是二维数组

Python 参数“image”必须是二维数组,python,imread,Python,Imread,我将计算一些纹理的共现矩阵,在下面的代码中,当我在cv2.imread()中硬编码一个地址时,通常不会出现错误,但是现在我使用了一个变量(train_image),我得到了错误,即“参数image必须是一个二维数组” train_image=[] train_images = cvutils.imlist(r"data/lbp/train/") #n_training_samples = len(train_images) train_dic = {} with open('data/lbp/t

我将计算一些纹理的共现矩阵,在下面的代码中,当我在cv2.imread()中硬编码一个地址时,通常不会出现错误,但是现在我使用了一个变量(train_image),我得到了错误,即“参数
image
必须是一个二维数组”

train_image=[]
train_images = cvutils.imlist(r"data/lbp/train/")
#n_training_samples = len(train_images)
train_dic = {}
with open('data/lbp/train_label.txt', 'rb') as csvfile:
    reader = csv.reader(csvfile, delimiter=',')
    for row in reader:
        train_dic[row[0]] = int(row[1])

X_train = []
X_name = []
y_train = []
#z_test = []
for train_image in train_images:
    im = cv2.imread(train_image)
    ngcm= greycomatrix(im, [1], [0], 256, symmetric=False, normed=True)
    contrast = greycoprops(ngcm, 'contrast')
    im_gray = cv2.cvtColor(im, cv2.COLOR_BGR2GRAY)
    radius = 2
    no_points = 8 * radius
    lbp = local_binary_pattern(im_gray, no_points, radius, method='uniform')
    #classifier = svm.SVC(gamma=0.001)
    #classifier.fit(data[:n_samples / 2], digits.target[:n_samples / 2])
    x = itemfreq(lbp.ravel())
    hist = x[:, 1]/sum(x[:, 1])
    X_name.append(train_image)
    X_train.append(hist)
    y_train.append(train_dic[os.path.split(train_image)[1]])
model = LinearSVC(C=100.0, random_state=50)
model.fit(X_train, y_train)
这是我得到的错误:

ValueError                                Traceback (most recent call last)
<ipython-input-20-9c879ecfb9e6> in <module>()
      5 for train_image in train_images:
      6     im = cv2.imread(train_image)
----> 7     ngcm= greycomatrix(im, [1], [0], 256, symmetric=False, normed=True)
      8     contrast = greycoprops(ngcm, 'contrast')
      9     im_gray = cv2.cvtColor(im, cv2.COLOR_BGR2GRAY)

d:\Anaconda2\lib\site-packages\skimage\feature\texture.pyc in greycomatrix(image, distances, angles, levels, symmetric, normed)
     90 
     91     """
---> 92     assert_nD(image, 2)
     93     assert_nD(distances, 1, 'distances')
     94     assert_nD(angles, 1, 'angles')

d:\Anaconda2\lib\site-packages\skimage\_shared\utils.pyc in assert_nD(array, ndim, arg_name)
    163         ndim = [ndim]
    164     if not array.ndim in ndim:
--> 165         raise ValueError(msg % (arg_name, '-or-'.join([str(n) for n in ndim])))

ValueError: The parameter `image` must be a 2-dimensional array
ValueError回溯(最近一次调用)
在()
5对于列车图像中的列车图像:
6 im=cv2.imread(列车图像)
---->7 ngcm=灰色矩阵(im[1],[0],256,对称=假,规范=真)
8对比度=灰度值(ngcm,“对比度”)
9 im_gray=cv2.CVT颜色(im,cv2.COLOR_BGR2GRAY)
d:\Anaconda2\lib\site packages\skimage\feature\texture.pyc(图像、距离、角度、级别、对称、规范)
90
91     """
--->92断言(图2)
93断言(距离,1,‘距离’)
94断言(角度,1,‘角度’)
d:\Anaconda2\lib\site packages\skimage\\u shared\utils.pyc在assert\u nD中(数组、ndim、arg\u名称)
163 ndim=[ndim]
164如果ndim中没有array.ndim:
-->165 raise VALUERROR(消息%(arg_name,'-or-'.join([str(n)表示ndim中的n]))
ValueError:参数'image'必须是二维数组

感谢您的帮助或提示!您需要将颜色转换为灰色图像

im = cv2.imread(train_image)
im = cv2.cvtColor(im, cv2.COLOR_BGR2GRAY)
ngcm= greycomatrix(im, [1], [0], 256, symmetric=False, normed=True)

greycomatrix从哪里来?它来自skimage lib。