Я пытаюсь преобразовать мою текстуру kivy в формат изображения, чтобы я мог обработать ее, используя opencv (cv2). Я попытался прочитать текстуру, используя read () и cv2.imread (), но ни один из них не сработал. Я также посмотрел на преобразование текстуры ubyte в строку, но ничего не получил.
текстура камеры kivy -> формат, который я могу обработать, используя cv2
что-то вроде
MyVariable = someid.texture
#do something to format of MyVariable so that it is an 'image'
Newvar = MyVariable.read()
#cv2 processing...
РЕДАКТИРОВАТЬ:
Хорошо, поэтому я получил данные из текстуры, используя texture.pixel в формате массива RGB. Затем я использовал
newvalue = np.frombuffer(camera.texture.pixels, np.uint8)
, чтобы получить данные в виде пустой строки. Оттуда было довольно легко повторно отобразить его на виджете изображения, используя:
finalstage = newvalue.tostring()
texture1 = Texture.create(size=variables.size, colorfmt='rgba')
texture1.blit_buffer(finalstage, colorfmt='rgba', bufferfmt='ubyte')
image.texture = texture1
Моя проблема в том, что теперь я хочу использовать Opencv для рисования прямоугольников на лицах, а затем обновить текстуру изображения. У меня есть рабочий код для рисования прямоугольников, однако сначала мне нужно преобразовать данные RGB в серый, используя
gray = cv2.cvtColor(newvalue, cv2.COLOR_RGBA2GRAY)
. Это возвращает мою новую ошибку:
11-08 17:22:51.451 25259 25582 E cv::error(): OpenCV(4.0.1) Error: Unspecified error (> Invalid number of channels in input image:
11-08 17:22:51.451 25259 25582 E cv::error(): > 'VScn::contains(scn)'
11-08 17:22:51.451 25259 25582 E cv::error(): > where
11-08 17:22:51.451 25259 25582 E cv::error(): > 'scn' is 1
11-08 17:22:51.451 25259 25582 E cv::error(): ) in cv::CvtHelper<cv::Set<3, 4, -1>, cv::Set<1, -1, -1>, cv::Set<0, 2, 5>, cv::SizePolicy::NONE>::CvtHelper(cv::InputArray, cv::OutputArray, int) [VScn = cv::Set<3, 4, -1>, VDcn = cv::Set<1, -1, -1>, VDepth = cv::Set<0, 2, 5>, sizePolicy = cv::SizePolicy::NONE], file /home/.../color.hpp, line 259
Если я что-то пропустилдай мне знать