Я могу найти примеры только на C/C++, и они, похоже, никогда не сопоставляются с API OpenCV. Я загружаю видеокадры (как из файлов, так и с веб-камеры) и хочу уменьшить их до 16 цветов, но сопоставить с 24-битным цветовым пространством RGB (это то, что требуется для моего вывода — гигантский светодиодный дисплей).
Я читаю данные так:
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