[英]Posturizing grayscale image using OpenCV-Python
我試圖使用 opencv 在 python 中對圖像進行后處理,經過一段時間的搜索,我在openCV 文檔中找到了一個線索。 但是正如您所看到的 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()
輸入圖像:
輸出圖像:
有人可以解釋一下發生了什么嗎?
Kmeans 輸入是向量的向量,或者在很多情況下,是像素向量或 2D/3D 點向量。 在您的代碼中,您正在傳遞一個圖像,它是一行中的值的向量。 這就是為什么你會得到這個奇怪的值。
簡單,將輸入重塑為灰度值的一維向量。
Z = img.reshape((-1,1))
這樣,它會嘗試使用每個灰度值作為輸入來對它們進行聚類(分組),然后相應地標記每個值。
如果您在示例中進一步查看,您可以找到如下解決方案:
import numpy as np
import cv2
img = cv2.imread('Lenna.png')
Z = img.reshape((-1,3))
# convert to np.float32
Z = np.float32(Z)
# define criteria, number of clusters(K) and apply kmeans()
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)
# Now convert back into uint8, and make original image
center = np.uint8(center)
res = center[label.flatten()]
res2 = res.reshape((img.shape))
cv2.imshow('res2',res2)
cv2.waitKey(0)
cv2.destroyAllWindows()
請注意此處的重塑以考慮 RGB 圖像。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.