VisualStudio2019とOpenCVで いろいろ躓く

Webカメラの画像を5分毎にJPGファイルにしたいと思った

LiveCapture3

というソフトがこれを実現してくれるピッタリなソフトだった・・・が
私の環境ではどうしても動いてくれなかった
最初の起動でカメラを設定し最後にOKを押すとそれ以降、何も表示されない状態

これは困った・・・

と言うわけで、練習を兼ねて久しぶりにVisualStudioでプログラムしてみることにした
なにせ1から書くのは数年ぶり、ついでにVisualStudioも2019が無料で手に入る時代になっている、ビックリである

OpenCVを利用するとこの手のソフトが簡単にできるらしい・・・が
ちっとも簡単では無い

インストール方法等は他のサイトに有るのでそちらで確認して下さい。

今日が1日目なんですが、取り合えず JPG ファイルを読み込んで
表示させてみるサンプルを見つけたのでやってみました サンプルは こちら

今日分かった事を備忘録で書いておく

cv::imread

はデバッグモードでは機能しないらしい


cv::Mat img = cv::imread(cvfilename);

if (img.empty()) {
 AfxMessageBox(_T(“ファイルが読めません”), MB_OK | MB_ICONEXCLAMATION);
 return;
}

何度やっても ”ファイルが読めません”ダイアログが表示されちゃう
何時間考えて判らんので ググってみた
http://libliver.blogspot.com/2014/12/opencvimread.html

ここを読んで、腑に落ちました

releaseモードでやれば動くんだと納得しました、ありがとうございました。

次の気づき

cv::Mat img = cv::imread(cvfilename);
の cvfilename は cv::String じゃないとダメなんですね

これを
// ファイルダイアログを表示して取得する
CString strfilename = dlg.GetPathName();
cv::Mat img = cv::imread( strfilename );

なんて書いてましたが、エラーがでて先へ進めません

CString strfilename = dlg.GetPathName();
cv::String cvfilename = strfilename.GetString();

とかって書いてあるサイトもありましたが、これもダメっすね

結局 ココを参考にさせていただいて(パクッて)以下の通りとしました
CString strfilename = dlg.GetPathName();
CStringA csTempmb( strfilename.GetBuffer(0));
cv::String cvfilename = csTempmb.GetBuffer(0);
cv::Mat img = cv::imread( strfilename );
これで一件落着です。

今日はここまで

素人プログラマーなんて所詮こんなもんです
分からない所はググって探して、ガッチャンコで動けばOKてな感じです

今日の成果


Button1を押すと、ファイルダイアログが表示されて
ファイルを選ぶと表示されるダケのプログラムが完成しました\(^o^)/

次の目標はwebカメラを表示させるかな?

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA