OpenCVのcvCanny(...)とそれが処理できる画像データ型に問題があります。まあ、多分あなたたち/ギャルは解決策を知っています。
32ビットのfloatイメージがあり、その上でcvCannyを実行したいと思います。問題は、cvCannyが「IPL_DEPTH_8S」またはU(signed / unsigned short)しか処理できないこと、または少なくともそれが私が疑うことです。OpenCVのマニュアルには、それがどれだけ処理できるかが示されておらず、cv/cvcanny.cppのこの行は私の期待を高めませんでした。
...
if( CV_MAT_TYPE( src->type ) != CV_8UC1 ||
CV_MAT_TYPE( dst->type ) != CV_8UC1 )
CV_ERROR( CV_StsUnsupportedFormat, "" );
...
私が持っている画像はグレースケール/単精度float32ビットで、画像の値は0.0から16.0の間です。float32をunsignedshortにキャストしても、値の精度が低下し、OpenCVのキャニーでエッジが失われるため、あまり役に立ちません。
あなたたちは私の問題の解決策をたまたま知っていますか?(ITKを使用する以外に:))