Python 将rgb图像从numpy阵列转换为HSV(opencv)

Python 将rgb图像从numpy阵列转换为HSV(opencv),python,numpy,opencv,Python,Numpy,Opencv,当我将图像从RGB转换为HSV时,如果图像直接来自opencv,则一切正常: img = cv2.imread(path) img = cv2.cvtColor(img, cv2.COLOR_BGR2HSV) 然而,如果该图像来自形状的numpy阵列(nb_of_图像,224224,3),则会有一些复杂情况 以下是我的导入功能: def import_images(path_list): path_len = len(path_list) images = numpy.zero

当我将图像从RGB转换为HSV时,如果图像直接来自opencv,则一切正常:

img = cv2.imread(path)
img = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
然而,如果该图像来自形状的numpy阵列(nb_of_图像,224224,3),则会有一些复杂情况

以下是我的导入功能:

def import_images(path_list):
    path_len = len(path_list)
    images = numpy.zeros((path_len, 224, 224, 3), dtype = numpy.float64)

    for pos in range(path_len):
        testimg = cv2.imread(path_list[pos])

        if(testimg is not None):
            testimg = cv2.cvtColor(testimg, cv2.COLOR_BGR2RGB)
            testimg = cv2.resize(testimg, (224, 224))
            images[pos, :, :, :] = testimg
    return images
现在,我的麻烦来了:

images = import_images(["./test/dog.jpg"])
img = images[0, :, :, :]
img = cv2.cvtColor(img, cv2.COLOR_RGB2HSV)
控制台出现以下错误:

cv2.error:/io/opencv/modules/imgproc/src/color.cpp:11073:error:(-215)函数cvtColor中的深度==0 | |深度==2 | |深度==5

我试图更改图像类型:

img.astype(numpy.float32)
但是控制台给出了相同的错误

我错过了什么

--编辑--

我正在使用 python 3.5

努比(1.14.2)


opencv python(3.4.0.12)

问题在于
图像中元素的数据类型。现在是
np.float64

让我们看看

转换为
numpy
,这意味着元素的数据类型必须是
np.uint8
np.uint16
np.float32
,才能使
cvtColor
工作。对于一些颜色转换,还有其他更具体的检查

正如您提到的,32位浮动对于您的用例来说已经足够了,您可以这样做

images = numpy.zeros((path_len, 224, 224, 3), dtype = numpy.float32)

可能对你有帮助@里克姆。也许这是最后一个答案,其余的答案是使用古老的不推荐的opencv API。@DanMašek很难确定这一点,因为OP并没有提到API版本@Mel Abgrall这行可能也有问题
images[pos,:,:,:]=testimg
@RickM。对版本进行了编辑。什么样的问题会导致图像[pos,:,:,:]=testimg?@RickM。没有那么困难,因为OP只使用了新的API。在函数import_images中修改了这一行:images=numpy.zeros((path_len,224,224,3),dtype=numpy.float32)
images = numpy.zeros((path_len, 224, 224, 3), dtype = numpy.float32)