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カメラを表示させるかな?