-1

みなさん、こんにちは。stackoverflow に関する多くの有用なトピックをありがとうございます。大学のプロジェクトの一環として、名刺に遠近補正を実装して、OpenCV ライブラリを使用して C++ で OCR の準備をしようとしています。Canny と Hough による自動コーナー検出は、特定のカードと背景によっては信頼性が低いことがわかったので、今のところ手動でコーナーを選択する方法を実装したいと思います。

sourceforge ( http://sourceforge.net/p/opencvselmov/code/ci/master/tree/ ) でユーザー ajithsri によって次のコード (OpenCVSelect.cpp) が見つかりました。これはまさに私が必要としていたものです。しかし、しばらくいじっていたところ、突然クラッシュして不審に思いました。ポイントをクリックしたり移動したりしながらタスクマネージャを見ていると、プログラムがクラッシュするまで解放されずに大量のメモリが使用されていることに気付きました。

さて、私が言ったように、プログラミングに関しては本当に経験が浅く、コードの何が問題なのかを見つけることができませんでした。解決策が明らかな場合はご容赦ください。私のプロジェクトで使用できるように、誰かがコードのメモリの問題を手伝ってくれたら本当にありがたいです。

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

(OpenCV ライブラリと black.jpg が必要です)

4

1 に答える 1

1

ここに問題の 1 つがあります。膨大な数のイメージを複製し、最後のイメージのみをリリースしています。

void showImage(){
    IplImage *img2=img0;
    for(int j=0;j<nop;j++){     
        img2 = cvCloneImage(img2);
              ...
              for(int k=j+1;k<nop;k++){
                 img2 = cvCloneImage(img2);
                 ...
               }
     }
     ...
     cvReleaseImage(&img2);

これらの呼び出しをすべて削除しcvCloneImage()、代わりに変更します

         IplImage *img2=img0;

         IplImage *img2=cvCloneImage(img0);

そのコードは非常に貧弱に書かれており、おそらく他にも多くの問題があります。

findImg()上記と同様のリークがあります。

于 2013-06-07T01:53:42.143 に答える