【问题标题】:Loading OpenCV Image To Scikit Learn将 OpenCV 图像加载到 Scikit Learn
【发布时间】:2017-03-05 08:17:09
【问题描述】:

我正在编写一个机器学习脚本来拍照并标记它。我将数据集放在一个文件夹中,然后将它们添加到数组中并为标签创建另一个数组。当我尝试使用 svm.fit 它给出了错误:

File "scikit.py", line 43, in <module>
    clf.fit(arrayimg, arraylabel)
  File "/home/mkmeral/.local/lib/python2.7/site-packages/sklearn/svm/base.py", line 151, in fit
    X, y = check_X_y(X, y, dtype=np.float64, order='C', accept_sparse='csr')
  File "/home/mkmeral/.local/lib/python2.7/site-packages/sklearn/utils/validation.py", line 521, in check_X_y
    ensure_min_features, warn_on_dtype, estimator)
  File "/home/mkmeral/.local/lib/python2.7/site-packages/sklearn/utils/validation.py", line 405, in check_array
    % (array.ndim, estimator_name))
ValueError: Found array with dim 3. Estimator expected <= 2.

这是我写的脚本:

import cv2
import numpy as py
from sklearn import svm

camera_port = 0
camera = cv2.VideoCapture(camera_port)
ramp_frames = 5

def getImage():
    retval, im = camera.read()
    gray_image = cv2.cvtColor(im, cv2.COLOR_BGR2GRAY)
    return gray_image

def insertToArray(arrayone, arraytwo, no, true):
    if (true==1):
        directory = "/home/mkmeral/Desktop/opencv/strue/"
        arraytwo.append(1)
    else:
        directory = "/home/mkmeral/Desktop/opencv/sfalse/"
        arraytwo.append(0)

    im = cv2.imread(directory + str(no) + ".png")
    gray_image = cv2.cvtColor(im, cv2.COLOR_BGR2GRAY)
    arrayone.append(gray_image)

arrayimg = []
arraylabel = []
count = 1
while (count<43):
    insertToArray(arrayimg, arraylabel, count, 1)
    print("True = " , count)
    count = count + 1

count = 0
while (count<43):
    insertToArray(arrayimg, arraylabel, count, 0)
    print("False = ", count)
    count = count + 1

print("Done adding to arrays")
clf = svm.SVC()
print("Done adding to arrayssss")
clf.fit(arrayimg, arraylabel)

print("Done fitting")
for i in xrange(ramp_frames):
    temp = getImage()

testimage = getImage()

clf.predict(testimage)

我怎样才能使这些图像适合 Scikit 学习?预测从网络摄像头拍摄的图像会不会有问题?

【问题讨论】:

    标签: python opencv scikit-learn


    【解决方案1】:

    我不是图像处理方面的专家,但我猜您的 getImage 函数正在为每个图像返回一个二维数组。 sckit-learn 将期望每个训练实例都有一个一维数组。假设您所有的图像都具有相同的大小,那么以下应该可以工作

    def getImage():
        retval, im = camera.read()
        gray_image = cv2.cvtColor(im, cv2.COLOR_BGR2GRAY)
        return gray_image.flatten()
    

    这会将您的每个图像转换为一维数组。如果您的图片大小不同,那么您将需要执行一些图片处理步骤,例如调整大小或缩小采样。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-01-29
      • 2018-05-15
      • 2016-05-22
      • 2013-03-18
      • 2013-05-25
      • 2017-02-16
      • 1970-01-01
      相关资源
      最近更新 更多