cvLoadImageを使用するとプロセスが終了できません。
OpenCV1.1を使用して開発を行っているのですが、OpenCVの関数であるcvLoadImageとMFCのクラスであるCFileDialogを一緒に使用した場合、アプリケーションの終了時にプロセスが残ってしまいます。
デバッグ実行の場合、完全に終了まで至らない。
リリースビルドの実行ではタスクマネージャで確認する限りプロセスが残っています。
この現象は以下のコードを実行した場合発生しているようです。
逆に言えばこのコードを実行しなければ正常に終了します。
■現象の発生するコード
IplImage* pImage ;
CString strFilePath = "c:\\a.jpg";
CFileDialog dlg( TRUE,
NULL,
NULL,
OFN_FILEMUSTEXIST | OFN_HIDEREADONLY,
_T("すべてのファイル(*.*)|*.*||")
) ;
if( IDOK == dlg.DoModal() ) {
strFilePath = dlg.GetPathName() ;
TRACE( "%s\n", strFilePath ) ;
pImage = cvLoadImage( strFilePath , 1 ) ;
cvReleaseImage( &pImage ) ;
}
http://questionbox.jp.msn.com/qa5084716.html
ここを読むと似たような現象で、回避方法としてOpenCV1.0にすると書かれています。
関数やコンパイラの環境、症状がやや異なるので、同じかどうかは分かりませんが、なんとかOpenCV1.1でCFileDialogを使用したいのです。
よい回避方法がありましたらお教えください。
よろしくお願いします。
■開発環境
・VC++6.0
・OpenCV1.1pre
・WindowsXP
OpenCV2.0への変更とVC++6.0以外のコンパイラへの変更は考えていません。
No.1ベストアンサー
- 回答日時:
ちょっとぐぐった限りでは、バグのようなので、
http://sourceforge.net/tracker/?func=detail&aid= …
OpenCV1.0・2.0ではどうあがいても実現できず、
1.1でしか実現できない機能がある、という積極的な理由がある場合を
除いては、バージョンの変更をオススメします。
貼ったURLには回避方法らしきものは書いてあるものの、
バグはバグであって、完全に回避できていない可能性はあるので。
紹介していただいたサイトに書かれてあった回避方法は以下のような内容でした。
「::CoUninitialize() をアプリケーションの終了時に呼ぶ」
どうも、cvLoadImageではComの初期化を行っているのにもかかわらず、それを解放することを忘れているという感じのバグらしいですね。
本来CoInitializeとCoUninitializeはセットで、CoInitializeが実行されるとその回数分CoUninitializeも必要ということなので、念のためにclLoadImage関数を複数回実行して、終了時に1回CoUninitializeを呼ぶテストをしてみたところ、ちゃんと終了したようです。
とはいえ、バグはバグですので、お勧めのようにOpenCVのバージョンを変更できないか検討したいと思います。
ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) Excel2010 VBAが特定動作で実行出来なくなる 7 2022/12/29 14:26
- その他(クラウドサービス・オンラインストレージ) Onedriveで実現したい事。2台のPC間で。 2 2023/04/10 20:42
- Visual Basic(VBA) vba メモリ節約 3 2022/09/16 21:45
- 格安スマホ・SIMフリースマホ 楽天モバイル、iPhone14購入について 回答お願いします。 現在は楽天モバイルのスマホ使用です。 6 2022/11/18 05:37
- その他(ソフトウェア) ソフトが異常終了します 1 2022/08/28 01:41
- PostgreSQL DBFluteについて質問です。 環境:PostgreSQL java8 前提:webアプリケーショ 1 2022/07/07 00:49
- Windows 10 windowsの回復ドライブや復元ポイントを使用した場合の戻る位置を教えてください。 5 2023/08/19 14:52
- Windows 7 Media Playerが開かない。ファイルアイコンを右クリックしても「プロパティ」が表示されない。 2 2023/02/05 14:45
- その他(プログラミング・Web制作) プログラムの起動、利用について、使用期間を設定する方法 3 2023/08/06 21:03
- その他(パソコン・周辺機器) EXCELで「WEBオプションの対象ブラウザ」を変更する方法 2 2023/04/12 15:44
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
タスクマネージャーのプロセス...
-
バックグラウンドのプロセスの...
-
起動中の他のプログラム(orプ...
-
CreateObjectで作成したExcelの...
-
プロセスのアタッチ・デタッチ...
-
C#でのbatファイル実行結果取得
-
Windowsでのfork方法
-
ロードアベレージが高いのです...
-
explorer.exeが異様にメモリを食う
-
シェルで親プロセス終了時に子...
-
非表示になったエクセルは?
-
他のEXEが起動しているかの確認
-
警告『 別のプロセスで使用され...
-
VB6.0 SHELLで起動...
-
VBSからbat実行(WMI)して戻り値...
-
OSPFでプロセスを分ける意義に...
-
SendMessageが失敗するときがある
-
execvpでのcdコマンドについて。
-
起動中のEXCELファイル(EXCEL...
-
API関数 GetExitCodeProcess
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
バックグラウンドのプロセスの...
-
explorer.exeが異様にメモリを食う
-
タスクマネージャーのプロセス...
-
C#でのbatファイル実行結果取得
-
プロセスのアタッチ・デタッチ...
-
VB6.0 SHELLで起動...
-
プロセスIDからウィンドウハ...
-
Process.Startの戻り値を後で取得
-
ウィンドウのタイトルからプロ...
-
他のEXEが起動しているかの確認
-
ADOでアクセスのレコードに...
-
怪しいプロセス教えてください。
-
別のプロセスの関数を呼び出す...
-
C++のプログラムをバックグラウ...
-
Linuxでのスレッド間メッセージ...
-
C++でシェルを起動
-
プロセスIDの取得方法について
-
OSPFでプロセスを分ける意義に...
-
非表示になったエクセルは?
-
Windowsでのfork方法
おすすめ情報