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
,这将将图像数据的数据类型从浮点型转换为整数。
解决办法:文章来源:https://www.toymoban.com/news/detail-811416.html
在调用Sobel函数之前,将图像 x
的数据类型进行调整,确保输入图像的数据类型是浮点型。使用x = x.astype(np.float32)
将NumPy数组的数据类型转换为浮点型。文章来源地址https://www.toymoban.com/news/detail-811416.html
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)
到了这里,关于cv2.error: OpenCV(4.5.5) :-1: error: (-5:Bad argument) in function ‘Sobel‘的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!