【发布时间】:2014-09-01 08:28:51
【问题描述】:
我正在尝试将图像上的颜色聚集到预定义的类(黑色、白色、蓝色、绿色、红色)。我正在使用以下代码:
import numpy as np
import cv2
src = cv2.imread('objects.png')
colors = np.array([[0x00, 0x00, 0x00],
[0xff, 0xff, 0xff],
[0xff, 0x00, 0x00],
[0x00, 0xff, 0x00],
[0x00, 0x00, 0xff]], dtype=np.float32)
classes = np.array([[0], [1], [2], [3], [4]], np.float32)
dst = np.zeros(src.shape, np.float32)
knn = cv2.KNearest()
knn.train(colors, classes)
# This loop is very inefficient!
for i in range(0, src.shape[0]):
for j in range(0, src.shape[1]):
sample = np.reshape(src[i,j], (-1,3)).astype(np.float32)
retval, result, neighbors, dist = knn.find_nearest(sample, 1)
dst[i,j] = colors[result[0,0]]
cv2.imshow('src', src)
cv2.imshow('dst', dst)
cv2.waitKey()
代码运行良好,结果如下所示。左图为输入,右图为输出。
但是上面的循环效率非常低,并且转换速度很慢。替换上述循环的最有效的 Numpy 操作是什么?
【问题讨论】:
标签: python opencv numpy machine-learning