【发布时间】:2019-12-04 18:19:07
【问题描述】:
我正在使用 SVM 来预测我的投资回报率,我训练了 SVM,现在在测试阶段,它给我输出带有 1 和 0 形式的标签。
我正在尝试如果 SVM 预测 1 平均图像包含眉毛,现在我希望它应该是围绕眉毛的矩形,因为算法是基于眉毛进行预测的。我怎样才能做到这一点?
以下是我用于预测的代码。
h_og = cv2.HOGDescriptor()
histogram = h_og.compute(photo)
arr.append(histogram)
arr = np.float32(arr)
result = svm.predict(arr)
现在结果是数字或标签的形式。如何在测试图像的 ROI 上绘制一个矩形。
Positive data: image with eyebrows
Negative data: images not containing eyebrow
Testing data: Full face of the person
如果我必须将detectMultiScale() 与它一起使用,我将如何将其与上述逻辑一起使用。
用于训练目的的代码
sam = []
lab = []
# Get positive samples
for filename in glob.glob('D:\*.png'):
im = cv2.imread(filename, 1)
h_og = cv2.HOGDescriptor()
hist = h_og.compute(im)
sam.append(hist)
lab.append(1)
# Get negative samples
for file in glob.glob('D:\\*.png'):
im = cv2.imread(file, 1)
im = cv2.resize(img, (240, 160))
h_og = cv2.HOGDescriptor()
hist = h_og.compute(im)
sam.append(hist)
lab.append(0)
# Convert objects to Numpy Objects
sam = np.float32(sam)
lab = np.array(lab)
# Shuffle Samples
rand = np.random.RandomState(321)
shuffle = rand.permutation(len(sam))
sam = sam[shuffle]
lab = lab[shuffle]
svm = cv2.ml.SVM_create()
svm.setType(cv2.ml.SVM_C_SVC)
#svm.setKernel(cv2.ml.SVM_RBF)
cv2.ml.SVM_LINEAR
# svm.setDegree(0.0)
svm.setGamma(5.383)
# svm.setCoef0(0.0)
svm.setC(2.67)
# svm.setNu(0.0)
# svm.setP(0.0)
# svm.setClassWeights(None)
svm.train(sam, cv2.ml.ROW_SAMPLE, lab)
svm.save('file.xml')
更多解释:
如果我的图像包含眉毛,我的 SVM 预测将成功返回我 1 但之后我希望它以下面的方式显示该图像,矩形应该位于 SVM 预测 1 所基于的坐标上
上图只是一个示例图,我是为眉毛做的,经过预测,我想通过上述方式实现或尝试实现输出。
【问题讨论】:
-
我的数据将其转换为浮点形式,我不只是简单地绘制矩形,它首先是我预测并希望根据该预测绘制一个矩形。
-
那你应该先问这样的问题:如何根据我的预测得到 ROI 坐标?
-
是的,这条评论可以更好地预测我正在尝试做什么或寻求帮助
-
举报我在聊天中说的话,负面标签应该是-1。
标签: image opencv image-processing computer-vision svm