为了账号安全,请及时绑定邮箱和手机立即绑定

使用 np.sqrt 处理后无法可视化图像

使用 np.sqrt 处理后无法可视化图像

HUX布斯 2023-09-05 15:09:07
我正在尝试使用 perwit 内核进行边缘检测。我的问题是,当我尝试将水平渐变与垂直渐变“合并”时,因为之后我在 cv2.imshow() 函数中收到错误,看起来图像有变形。这是我的代码imgx = filter_image(img,kx,3)imgy = filter_image(img,ky,3)img_edge = np.sqrt(np.power(imgx, 2) + np.power(imgy, 2))img_edge = (img_edge / np.max(img_edge)) * 255print(np.shape(img_edge))print(np.min(img_edge))print(np.max(img_edge))cv2.imshow('imagey',img_edge)这是我的输出(256, 256)0.0255.0Traceback (most recent call last):  File "<ipython-input-17-c200db56adba>", line 1, in <module>    runfile('C:/Users/giorg/Desktop/Elte/Image Analysis/Lab 1/filter.py', wdir='C:/Users/giorg/Desktop/Elte/Image Analysis/Lab 1')  File "C:\Users\giorg\Anaconda3\lib\site-packages\spyder_kernels\customize\spydercustomize.py", line 827, in runfile    execfile(filename, namespace)  File "C:\Users\giorg\Anaconda3\lib\site-packages\spyder_kernels\customize\spydercustomize.py", line 110, in execfile    exec(compile(f.read(), filename, 'exec'), namespace)  File "C:/Users/giorg/Desktop/Elte/Image Analysis/Lab 1/filter.py", line 58, in <module>    cv2.imshow('imagey',img_edge)TypeError: Expected Ptr<cv::UMat> for argument 'mat'我不知道为什么,但我认为问题出在 np.sqrt() 上。如果我对 imgy 和 imgx 进行简单的求和,它就会起作用。
查看完整描述

1 回答

?
精慕HU

TA贡献1845条经验 获得超8个赞

问题是您传递的是一个数组,np.float64而不是 openCV 可以理解的类型,例如np.unit8。具体来说,后面的步骤sqrt映射到正确的范围,但不调整类型:

img_edge = (img_edge / np.max(img_edge)) * 255

您可以看出,因为最小/最大打印输出中有小数点,这通常仅在打印浮点类型时才会发生。

再添加一步:

cv2.imshow('imagey', img_edge.astype(np.uint8))

或者单独进行:

img_edge = img_edge.astype(np.uint8)


查看完整回答
反对 回复 2023-09-05
  • 1 回答
  • 0 关注
  • 77 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信