1

画像の一部を回転させてトリミングするプロセスの一部として、コードで getRectSubPix 関数を使用する必要があります。これは 3 チャンネル画像では正常に動作しますが、BGRA または RGBA マット画像で使用しようとするとすぐにクラッシュし、メッセージが表示されます。

OpenCV エラー: サポートされていない形式または形式の組み合わせ () cvGetRectSubPix、ファイル /home/biotracking/Downloads/OpenCV-2.4.2/modules/imgproc/src/samplers.cpp、行 550

私のコードは基本的にこのようなものです

                cv::cvtColor(polymask, polymask, CV_BGR2BGRA);
                getRectSubPix(polymask, cv::Size(sqrt(biggestdistancesquared)*2,sqrt(biggestdistancesquared)*2), src_center, polymask);

もしこの機能が本当にクレイジーに見えるアルファチャンネルを持つ Mats でうまくいかなかったとしたら。誰か知ってる?

4

2 に答える 2

4

この問題と @blorgggg さんの回答に少し前に気づき、問題がchannelsに関連しているので深く疑問に思いましたが、回答はdepthに関連しています。


getRectSubPix私の答え:チャンネル 1 または 3 のイメージしかサポートしていないため、エラーが発生します。

関連コード:

if( (cn != 1 && cn != 3) || !CV_ARE_CNS_EQ( src, dst ))
    CV_Error( CV_StsUnsupportedFormat, "" );

ここで @luhb によるスレッドのステートメントは true です。これは、実際には深さ 8 または 32 の画像のみをサポートしているためです。ただし、ここでの質問とは関係ありません。

関連コード:

if( CV_MAT_DEPTH( src->type ) != CV_8U || CV_MAT_DEPTH( dst->type ) != CV_32F )
            CV_Error( CV_StsUnsupportedFormat, "" );

バージョン 2.4/2.8/2.9 のコード スニペットを確認します。


getRectSuxPix最後に、問題を解決するために、最初に各チャネルでマットを分割し、次に 4 つのチャネルをマージすることができます。

于 2014-10-23T03:36:46.617 に答える
0

別の男が、ユーザー luhb が回答した別の質問で、この質問に対する答えを釘付けにしました: Open CV using 16 bit signed format not working... 画像のトリミングとサイズ変更

getRectSubPix は、{src,dst} タイプの {CV_8U, CV_8U}、{CV_32F, CV_32F}、および {CV_8U, CV_32F} でのみ機能するようです。

ソースコードを掘り下げて、それを理解します。API リファレンスには仕様がありません。

于 2012-11-16T02:18:56.500 に答える