Мога да намеря само примери в C/C++ и те никога не изглежда да се съпоставят добре с OpenCV API. Зареждам видео кадри (както от файлове, така и от уеб камера) и искам да ги намаля до 16 цвята, но съпоставени към 24-битово RGB цветово пространство (това изисква моят изход - гигантски LED дисплей).
Прочетох данните така:
ret, frame = self._vid.read()
image = cv2.cvtColor(frame, cv2.COLOR_RGB2BGRA)
Намерих примера на python по-долу, но не мога да разбера как да го съпоставя с типа изходни данни, от които се нуждая:
import numpy as np
import cv2
img = cv2.imread('home.jpg')
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()
Това очевидно работи за програмата за преглед на изображения OpenCV, но се опитва да направи същите грешки в моя изходен код, тъй като имам нужда от RGB или RGBA формат. Моят резултат работи така:
for y in range(self.height):
for x in range(self.width):
self._led.set(x,y,tuple(image[y,x][0:3]))
Всеки цвят е представен като (r,g,b) кортеж.
Някакви мисли как да накарам това да работи?
res2
в примерния код на OpenCV по-горе е BGR цветно квантувано изображение и това работи добре. Значи проблемът ви е с вашия_led
дисплей? - person Miki   schedule 20.09.2015