在 opencv 中向 SVM 提供输入时出错
Getting Error while giving input to SVM in opencv
我正在尝试使用 SVM.For 训练将图像分类为红色和绿色 我从训练中提取了 rgba images.I 还将我的列表转换为 numpy array.But 我收到错误消息将它交给 SVM for training.My 示例代码是
import cv2
import numpy
import numpy as np
from PIL import Image
import os
print "OpenCV version : {0}".format(cv2.__version__)
svm_params = dict( kernel_type = cv2.SVM_LINEAR,
svm_type = cv2.SVM_C_SVC,
C=2.67, gamma=5.383 )
path1='c:\colors\red\'
path2='c:\colors\green\'
training_set = []
test_set=[]
training_labels=[]
rlist = os.listdir(path1)
glist= os.listdir(path2)
for file in rlist:
img = Image.open(path1 + file)
img200=img.resize((100,100)).convert('RGBA')
arr= np.array(img200)
print arr
training_set.append(arr)
training_labels.append(1)
for file in glist:
img = Image.open(path2 + file)
img200=img.resize((100,100)).convert('RGBA')
arr= np.array(img200)
training_set.append(arr)
training_labels.append(2)
###### SVM training ########################
trainData=np.float32(training_set)
responses=np.float32(training_labels)
svm = cv2.SVM()
svm.train(trainData,responses, params=svm_params)
svm.save('trycolor_svm_data.dat')
我遇到错误
cv2.error: ..\..\..\..\opencv\modules\ml\src\inner_functions.cpp:857: error: (-5) train data must be floating-point matrix in function cvCheckTrainData
我怎样才能正确地给 svm 输入
如果你打印 'arr' 你会明白它是 lists.Thats 的列表 problem.You 在给 svm 提供输入之前需要将其展平。
flat_arr= arr.ravel()
这是更正后的代码。
for file in listing1:
img = Image.open(path1 + file)
img200=img.resize((100,100)).convert('RGBA')
arr= np.array(img200)
flat_arr= arr.ravel()
training_set.append(flat_arr)
training_labels.append(1)
for file in listing2:
img = Image.open(path2 + file)
img200=img.resize((100,100)).convert('RGBA')
arr= np.array(img200)
flat_arr= arr.ravel()
training_set.append(flat_arr)
training_labels.append(2)
我正在尝试使用 SVM.For 训练将图像分类为红色和绿色 我从训练中提取了 rgba images.I 还将我的列表转换为 numpy array.But 我收到错误消息将它交给 SVM for training.My 示例代码是
import cv2
import numpy
import numpy as np
from PIL import Image
import os
print "OpenCV version : {0}".format(cv2.__version__)
svm_params = dict( kernel_type = cv2.SVM_LINEAR,
svm_type = cv2.SVM_C_SVC,
C=2.67, gamma=5.383 )
path1='c:\colors\red\'
path2='c:\colors\green\'
training_set = []
test_set=[]
training_labels=[]
rlist = os.listdir(path1)
glist= os.listdir(path2)
for file in rlist:
img = Image.open(path1 + file)
img200=img.resize((100,100)).convert('RGBA')
arr= np.array(img200)
print arr
training_set.append(arr)
training_labels.append(1)
for file in glist:
img = Image.open(path2 + file)
img200=img.resize((100,100)).convert('RGBA')
arr= np.array(img200)
training_set.append(arr)
training_labels.append(2)
###### SVM training ########################
trainData=np.float32(training_set)
responses=np.float32(training_labels)
svm = cv2.SVM()
svm.train(trainData,responses, params=svm_params)
svm.save('trycolor_svm_data.dat')
我遇到错误
cv2.error: ..\..\..\..\opencv\modules\ml\src\inner_functions.cpp:857: error: (-5) train data must be floating-point matrix in function cvCheckTrainData
我怎样才能正确地给 svm 输入
如果你打印 'arr' 你会明白它是 lists.Thats 的列表 problem.You 在给 svm 提供输入之前需要将其展平。
flat_arr= arr.ravel()
这是更正后的代码。
for file in listing1:
img = Image.open(path1 + file)
img200=img.resize((100,100)).convert('RGBA')
arr= np.array(img200)
flat_arr= arr.ravel()
training_set.append(flat_arr)
training_labels.append(1)
for file in listing2:
img = Image.open(path2 + file)
img200=img.resize((100,100)).convert('RGBA')
arr= np.array(img200)
flat_arr= arr.ravel()
training_set.append(flat_arr)
training_labels.append(2)