使用Opencv将BGR图转换为RGB时报错

报错信息:

error: (-215:Assertion failed) VScn::contains(scn) && VDcn::contains(dcn) && VDepth::contains(depth) in function 'cv::CvtHelper<struct cv::Set<3,4,-1>,struct cv::Set<3,4,-1>,struct cv::Set<0,2,5>,2>::CvtHelper'

报错代码:

img_path = glob.glob(r'.\faces\*.jpg')[:10000]
train_images = np.zeros((len(img_path), 96, 96, 3))
for i, image in enumerate(img_path):
    pixel = cv.imread(image)
    train_images[i] = pixel
image = cv.cvtColor(train_images[0], cv.COLOR_BGR2RGB)

错误原因:

cv.cvtColor中输入的图片的数据形式必须是uint8类型的,虽然cv.imread读取的图片数据类型的确是uint8,但经过train_images[i] = pixel之后,数据类型就已经变成了float64,这是因为在用np.zeros初始化train_images的时候,函数默认赋给train_images了float64类型,所以在转换时报错。

解决方法:

初始化train_images时规定数据类型:

img_path = glob.glob(r'.\faces\*.jpg')[:10000]
train_images = np.zeros((len(img_path), 96, 96, 3), dtype='uint8')
for i, image in enumerate(img_path):
    pixel = cv.imread(image)
    train_images[i] = pixel
image = cv.cvtColor(train_images[0], cv.COLOR_BGR2RGB)
发布了116 篇原创文章 · 获赞 13 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/qq_36758914/article/details/104670251