运行OpenCV的cv2.resize报错(-215:Assertion failed) func != 0如何解决
报错原因
该func != 0断言错误是OpenCV未找到匹配输入数据类型的resize处理逻辑导致的。你代码中创建的numpy数组a默认dtype为有符号整数类型(int32/int64),而cv2.resize仅支持以下数据类型的输入:
- uint8
- uint16
- float32
- float64
解决方法
调用resize前将数组转换为上述支持的类型即可,根据使用场景可选择两种方案:
方案1:适配图像展示场景
如果你的目的是展示二值图像,直接将数组转为uint8类型即可,同时注意原代码中cv2.destroyAllWindows缺少调用括号,修复后完整代码如下:
import numpy as np import cv2 # 创建数组时直接指定dtype a = np.array([[1,0],[0,0]], dtype=np.uint8) # 也可以后续转换:a = a.astype(np.uint8) a = cv2.resize(a, (400,400)) cv2.imshow('Image', a) cv2.waitKey(0) cv2.destroyAllWindows()
方案2:适配浮点运算场景
如果你后续需要对缩放后的数组做数值计算,可转为float32类型,展示时注意将数值范围映射到0-255即可:
import numpy as np import cv2 a = np.array([[1,0],[0,0]]).astype(np.float32) a = cv2.resize(a, (400,400)) # 浮点类型展示需归一化到0-255的uint8范围 cv2.imshow('Image', (a * 255).astype(np.uint8)) cv2.waitKey(0) cv2.destroyAllWindows()
内容的提问来源于stack exchange,提问作者EB97
相关产品推荐
相关产品推荐

