如何解决OpenCV运行时报错"Expected cv::UMat for argument 'src'"?
"Expected cv::UMat for argument 'src'"错误解决方案
该错误是cv2.dilate函数接收到的输入图像src不符合OpenCV要求的格式导致的,结合你给出的代码场景,按以下步骤排查解决:
- 第一步:修正参数名错误
你的代码中定义结构元素的变量名为kernel_2,但调用膨胀函数时传入的第二个参数是未定义的kernel,先修正调用语句:dd = cv2.dilate(src, kernel_2) - 第二步:校验
src的格式合法性
经K-means聚类输出的结果通常为float类型的标签矩阵,不符合OpenCV形态学操作要求的uint8/uint16等整数图像格式,需要先做格式转换:
可以加打印语句校验格式是否正确:# 假设n_clusters是你设置的K-means聚类类别数 src = (cluster_result * (255 / n_clusters)).astype(np.uint8)print(src.shape, src.dtype) # 正常输出应该类似 (512,512) uint8,不允许为None或者float类数值类型 - 第三步:兼容UMat格式转换
如果上述修改后仍报错,可以手动将numpy数组转换为OpenCV的UMat格式再传入函数:src_umat = cv2.UMat(src) dd = cv2.dilate(src_umat, kernel_2) # 后续处理需要转回numpy数组的话调用get方法 dd_np = dd.get()
内容的提问来源于stack exchange,提问作者CHH
相关产品推荐
相关产品推荐

