Преобразование HSV2BGR не выполняется в Python OpenCV script

Мой script должен взять изображение в оттенках серого и отобразить значения в оттенки.

#!/usr/bin/env python

import cv2
import numpy

infile = cv2.imread('Lenna.png')

infile = infile[:,:,0]

hues = (numpy.array(infile)/255.)*179

outimageHSV = numpy.array([[[b,255,255] for b in a] for a in hues]).astype(int)

outimageBGR = cv2.cvtColor(outimageHSV, cv2.COLOR_HSV2BGR)

cv2.imshow('dst_rt', outimageBGR)
cv2.waitKey(0)
cv2.destroyAllWindows()

Он не работает в строке cvtColor, и я получаю эту ошибку:

OpenCV Error: Assertion failed (depth == CV_8U || depth == CV_16U || depth == CV_32F) in cvtColor, file /tmp/opencv20150506-38415-u2kidu/opencv-2.4.11/modules/imgproc/src/color.cpp, line 3644
Traceback (most recent call last):
  File "luma2hue.py", line 16, in <module>
    outimageBGR = cv2.cvtColor(outimageHSV, cv2.COLOR_HSV2BGR)
cv2.error: /tmp/opencv20150506-38415-u2kidu/opencv-2.4.11/modules/imgproc/src/color.cpp:3644: error: (-215) depth == CV_8U || depth == CV_16U || depth == CV_32F in function cvtColor

Нужно ли мне делать что-то еще в моем массиве outimageHSV, чтобы сделать его готовым для cvtColor?

Ответ 1

Сообщение об ошибке означает, что cv2.cvtColor ожидает изображение с (цветной) глубиной 8 или 16 бит без знака int (8U, 16U) или 32-битное поплавок (32F). Попробуйте изменить astype(int) на astype(numpy.uint8)

Ответ 2

outimageHSV должен быть выбран как uint8.

import numpy as np

outimageHSV = np.uint8(outimageHSV)
outimageBGR = cv2.cvtColor(outimageHSV, cv2.COLOR_HSV2BGR)