OpenCV 2.4.0 python バインディングを使用していますが、画像のラプラシアンを計算すると、cv2.cv 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 である必要があります。
「OverflowError: Python int が大きすぎて C long に変換できません」
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)
予想通り、符号付きラプラシアンが得られました。これは 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 で計算された im_laplacian とはまだ異なります
私の特定のケースでは、cv2 出力を回避できると思いますが、困惑しています。すべての API が同じ出力を生成するべきではありませんか? 彼らは異なるアルゴリズムを使用していますか?それとも、cv2 python バインディングは個々の C++ 関数に対応していませんが、それらの組み合わせに対応していますか?