我正在尝试使用Numpy和sklearn构建一个单词包工作流。在
我想限制openCV的使用仅限于冲浪检测和提取。我知道openCV中有一个BOW类,但是缺少文档(针对Python),我希望构建工作流,以便真正理解其中的几个步骤。在
到目前为止,我能够将我的图像分离到训练集和测试集中,并在训练图像上运行SURF,创建一个特性列表(dscList
)。在
[trnImgs, testImgs, trnTargets, testTargets] =
train_test_split(imgPaths, imgLabels, test_size=0.7,
train_size=0.3, stratify=imgLabels)
surf = cv2.xfeatures2d.SURF_create()
dscList = []
for trnImg in trnImgs: # trnImg is a path to an image
img = cv2.imread(trnImg, 0)
(kps, dsc) = surf.detectAndCompute(img, None)
dscList.append((trnImg, dsc))
print("# kps: {}, dsc: {}".format(len(kps), dsc.shape))
输出如下:
^{pr2}$我知道下一步是创建一个Numpy数组,然后提交给sklearn的KMeans
。在
我想知道你能不能帮我做这些步骤:
Numpy数组:我不确定这是否正确地构建了np数组descriptors
descriptors = dscList[0][1]
for trnImg, descriptor in dscList[1:]:
descriptors = np.vstack((descriptors, descriptor))
sklearn KMeans:也不确定如何实施
k_means = cluster.KMeans(n_clusters=n_clusters, n_init=4)
k_means.fit(descriptors)
values = k_means.cluster_centers_.squeeze() # <=== is squeeze necessary?
labels = k_means.labels_
目前没有回答
相关问题 更多 >
编程相关推荐