我正在嘗試使用 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)
添加回答
舉報
0/150
提交
取消