none
OpenCVの機能を使ったアプリがうまく動作しない RRS feed

  • 質問

  • いつも大変お世話になっています。

    このフォーラムでOpenCV(2.1)について質問させていただくのは不適当かもしれませんが、もし詳しい方がいらっしゃいましたら、ご指導よろしくお願いいたします。

    Vista上で、VS2008で開発しています。

    OpenCVのDLLを使って、

    証明写真の顔部分を抽出し、指定された画像枠(5cmX3cmのような)に合うように、拡大/縮小を行って保存する処理を行っています。

    (顔認識で抽出される範囲は顔部分のみなので、上下左右に対象範囲を拡張しています)

    元画像が格納されているフォルダのすべての画像を、変換先フォルダにJPEG形式で保存するのですが、

    cvSaveImage( )関数で、パラメーターを指定すると(JPEGの品質を100に設定しています)、

    80%ぐらいの発生率で、変換後のJPEGファイルが劣化してしまいます(正常時60k前後が2k程度になります)。

    失敗するときはいつも、最後に変換されたファイルだけが正常に保存されています。

    パラメータを指定せず、デフォルト値(95)にすると、正常に変換されます。

    最後のファイルだけ正常に保存される、というところになにかヒントはあるでしょうか?

    よろしくお願いいたします。

    下記にソースを簡略化したものを記載させていただきました。

    ★:失敗   ☆:成功

    -------------------------------------------------------------------------------

     ※cascade, m_scale, m_neighborsは事前にセットしています。顔の認識数が1以外の時は処理を行いません。

    // 元画像ロード
    IplImage* frame;

    frame = cvLoadImage(SourcePath, CV_LOAD_IMAGE_UNCHANGED );

     // 顔検出
     CvMemStorage* storage = cvCreateMemStorage(0);
     CvSeq* faces;
     faces = cvHaarDetectObjects( frame, cascade, storage, m_scale, m_neighbors, CV_HAAR_DO_CANNY_PRUNING );

     // 元画像の対象となる矩形情報を、rectにセット(詳細は省略しています)。
     CvRect rect;

    // rect部分の切り取り
    cvSetImageROI(frame,rect);

    // 保存サイズのイメージ作成
    dst_img1 = cvCreateImage (cvSize (Frame_w, Frame_h), frame->depth, frame->nChannels);

    // 保存サイズに変形
    cvResize (frame, dst_img1, CV_INTER_CUBIC);

    // イメージの保存
    int params[]={CV_IMWRITE_JPEG_QUALITY,100};

    ★// 失敗が頻出
    cvSaveImage( DestPath, dst_img1, params );

    ☆// 成功
    cvSaveImage( DestPath, dst_img1 );

    // 解放
    cvReleaseImage(&frame);
    cvReleaseImage(&dst_img1);
    cvReleaseMemStorage( &storage );

    2012年9月24日 7:27

回答

すべての返信

  • http://d.hatena.ne.jp/Schima/20091106

    によると、第三引数の配列末尾には番兵が必要かも、とのことですが。

    • 回答としてマーク kizakura_ui 2012年9月24日 9:47
    2012年9月24日 8:07
  • さっそくのご指導、ありがとうございます。

    第三引数をセットしたパターンも試したみたつもりだったのですが、今回、再度セットしてみたら、劣化しなくなりました!

    ただ、そのサイトでは、第三引数が”-1”になっていますが、別の解説では、”0”がテキスト、”1”がバイナリで、バイナリがデフォルトと書かれていたので、”1”をセットすることにしました。

    今日は朝からずっと悩んでいたので、本当に助かりました。

    ありがとうございました。

    2012年9月24日 8:55