使用Python/OpenCV的warpAffine进行图像平移时触发断言错误
问题原因与解决方法
错误根源
报错信息明确要求变换矩阵必须是32位浮点型(CV_32F)或64位浮点型(CV_64F),但你创建的transform_matrix默认是整数类型(当tx/ty为整数时,np.array会自动推断为int类型),不符合OpenCV的参数要求。
修复方案
有两种方式可以修正矩阵类型:
方式1:创建矩阵时直接指定浮点类型
import numpy as np import cv2 def translate(im, tx, ty): height, width = im.shape[:2] # 创建矩阵时指定dtype为float32 transform_matrix = np.array([[1, 0, tx], [0, 1, ty]], dtype=np.float32) translation = cv2.warpAffine(src=im, M=transform_matrix, dsize=(width, height)) return translation # 补充返回值,否则调用函数无法获取结果
方式2:将现有矩阵转换为浮点类型
import numpy as np import cv2 def translate(im, tx, ty): height, width = im.shape[:2] transform_matrix = np.array([[1, 0, tx], [0, 1, ty]]) # 转换矩阵为float32类型 transform_matrix = transform_matrix.astype(np.float32) translation = cv2.warpAffine(src=im, M=transform_matrix, dsize=(width, height)) return translation
额外提示
原函数缺少返回语句,调用时无法获取平移后的图像,修复后的代码补充了return translation,确保功能完整。
内容的提问来源于stack exchange,提问作者SnorLaxatives
相关产品推荐
相关产品推荐

