【发布时间】:2017-09-25 16:51:00
【问题描述】:
我试图在 python 中使用 opencv 对图像进行分色处理,经过一段时间的搜索后,我在openCV documentations 中找到了线索。但是正如您所看到的,它用于 rgb 图像,而我得到的是灰度图像,无论如何我都这样做了,并且得到了奇怪的输出。我调整了代码中的一些地方,得到了更奇怪的输出。有人可以解释一下发生了什么吗?
编辑:
我的代码
import numpy as np
import cv2
img = cv2.imread('Lenna.png')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
Z = np.float32(gray)
criteria = (cv2.TERM_CRITERIA_EPS + cv2.TERM_CRITERIA_MAX_ITER, 10, 1.0)
K = 8
ret,label,center=cv2.kmeans(Z,K,None,criteria,10,cv2.KMEANS_RANDOM_CENTERS)
center = np.uint8(center)
res = center[label.flatten()]
cv2.imshow('res',res)
cv2.waitKey(0)
cv2.destroyAllWindows()
输入图片:
输出图像:
【问题讨论】:
-
据我所知,您想要的是某种图像量化。例如,我认为您可以通过使用垃圾箱来实现这一点。它还有助于了解奇怪的输出和变化,也许您可以发布图像或其他内容,以及您正在使用的一些代码来解释正在发生的事情。
-
是的。量化是正确的词。 :P
-
您缺少重塑部分
Z = img.reshape((-1,3))在您的情况下是 1 而不是 3(1 通道而不是 3)。如果你不这样做,那么你正在传递奇怪的向量(我认为是行) -
你是对的,伙计..它成功了.. :)