Python 将rgb图像从numpy阵列转换为HSV(opencv)
当我将图像从RGB转换为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
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)