cv2.error: OpenCV(4.5.5) :-1: error: (-5:Bad argument) in function ‘Sobel‘

本文描述了在使用OpenCV库中的Sobel函数时遇到的错误,原因在于输入图像的数据类型不支持。解决方案是确保图像在调用Sobel之前转换为浮点型。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

cv2.error: OpenCV(4.5.5) 👎 error: (-5:Bad argument) in function ‘Sobel’

Overload resolution failed:

  • src data type = 23 is not supported
  • Expected Ptrcv::UMat for argument ‘src’

报错代码:

def sobel(img):
    add_x_total = torch.zeros(img.shape)

    for i in range(img.shape[0]):
        x = img[i, :, :, :].squeeze(0).cpu().detach().numpy().transpose(1, 2, 0)

        x = x * 255

       # print(x.dtype)

        x_x = cv2.Sobel(x, cv2.CV_64F, 1, 0)
        x_y = cv2.Sobel(x, cv2.CV_64F, 0, 1)
        add_x = cv2.addWeighted(x_x, 0.5, x_y, 0.5, 0)
        add_x = transforms.ToTensor()(add_x).unsqueeze(0)
        add_x_total[i, :, :, :] = add_x

    return add_x_total

报错原因:

这个错误提示是由于传入 cv2.Sobel() 函数的图像类型不受支持所引起的。根据错误信息,是图像的数据类型不正确。

数据类型不匹配:Sobel函数要求输入图像的数据类型必须是浮点型。在代码中,处理图像前执行了以下操作:x = x * 255,这将将图像数据的数据类型从浮点型转换为整数。

解决办法:

在调用Sobel函数之前,将图像 x 的数据类型进行调整,确保输入图像的数据类型是浮点型。使用x = x.astype(np.float32)将NumPy数组的数据类型转换为浮点型。

x = x * 255
x = x.astype(np.float32)  # 将数据类型转换为浮点型
x_x = cv2.Sobel(x, cv2.CV_64F, 1, 0)
x_y = cv2.Sobel(x, cv2.CV_64F, 0, 1)
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值