0
我使用的是OpenCV 2.4.0 python綁定,我發現在計算圖片的laplacian時,我會從cv2.cv API獲得與cv2 API不同的結果。opencv 2.4.0拉普拉斯不同的結果取決於使用的API?
如果我使用CV2 API:
im_laplacian = cv2.Laplacian(im_gray, cv2.IPL_DEPTH_32F, ksize = 3)
im_laplacian總是UINT8(缺號),並ddepth必須IPL_DEPTH_32F或IPL_DEPTH_64F,如果我嘗試IPL_DEPTH_16S或IPL_DEPTH_32S我得到一個錯誤:
「OverflowError:Python的詮釋太大,轉換爲C長」
如果我使用cv2.cv API:
cvgray = cv.fromarray(im_gray)
im_laplacian2 = cv.CreateImage(cv.GetSize(cvgray), cv.IPL_DEPTH_16S, 1)
cv.Laplace(cvgray, im_laplacian2, 3)
正如我所料,我得到了一個簽名的laplacian,這與C++ API中的結果是一樣的。 如果我做的:
im_laplacian2_scaled = cv.CreateImage(cv.GetSize(cvgray), 8, 1)
cv.ConvertScaleAbs(dst, im_laplacian2_scaled, 1, 0)
im_laplacian2_scaled是從CV2 API計算
在我的具體情況,我想我可以逃脫的CV2輸出, im_laplacian仍然是不同的,但我puzzeled,不該」所有的API產生相同的輸出? 他們使用不同的算法嗎? 或者也許cv2 python綁定不對應於單獨的C++函數,但它們的一些組合?
好吧!我看到發生了什麼事。在cv2 API中使用ddepth cv2.IPL_DEPTH_32F會產生與使用cv2.CV_8U相同的效果,這就是我得到的結果。我想:我仍然想知道爲什麼IPL_DEPTH_xxx常量在cv2 API中出現,它們出現在自動完成中,也許出於兼容性的原因?謝謝你的回答Andrey。 – martinako