前提・実現したいこと
C++でOpenCVの動画保存(writer)をできるようにしたいです。
現在、公式サイトのサンプルコードほとんどそのままで実行しているのですが、バグが発生しています。avi形式の動画ファイルを作成しようとすると、文字化けした上で以下のエラーを吐きます。
発生している問題・エラーメッセージ
OpenCV(4.4.0) C:\build\master_winpack-build-win64-vc15\opencv\modules\videoio\src\cap_images.cpp:253: error: (-5:Bad argument) CAP_IMAGES: can't find starting number (in the name of file): 森タ in function 'cv::icvExtractPattern'
該当のソースコード
c++
1 2int capt_and_save()//main関数から呼び出してます。この関数をmainにしても結果は変わらないです。 3{ 4 Mat src;//画像用のクラス変数 5 // use default camera as video source 6 VideoCapture cap(0); 7 // check if we succeeded 8 if (!cap.isOpened()) { 9 cerr << "ERROR! Unable to open camera\n"; 10 return -1; 11 } 12 // get one frame from camera to know frame size and type 13 cap >> src; 14 // check if we succeeded 15 if (src.empty()) { 16 cerr << "ERROR! blank frame grabbed\n"; 17 return -1; 18 } 19 bool isColor = (src.type() == CV_8UC3);//ココ、キャプチャ画像がカラーかどうか確かめている? 20 //--- INITIALIZE VIDEOWRITER 21 VideoWriter writer; 22 int codec = VideoWriter::fourcc('M', 'J', 'P', 'G'); // select desired codec (must be available at runtime) 23 double fps = 25.0; // framerate of the created video stream 24 const string filename = "live.avi"; // name of the output video file 25 writer.open(filename, false, codec, fps, src.size(), isColor); //????ココ!! 26 /*↑filenameが文字化けする!! なぜに!?*/ // check if we succeeded 27 if (!writer.isOpened()) { 28 cerr << "Could not open the output video file for write\n"; 29 return -1; 30 } 31 ・ 32 ・ 33 ・ 34 コードはまだ続きますが、デバック中にこの時点で異常終了(return -1)で終了します。 35
試したこと
エラーメッセージの箇所で、ファイル名らしきものが文字化けしていますので、
const string filename = "live.avi";
↓
const string filename = u8"live.avi";
にしてみましたが、結果は変わりませんでした。
他にもウェブサイトをあちこち回りましたが、具体的な問題はわかりませんでした。
バージョンの問題だとの声もありましたが、文字化け(?)しているという話はついぞ聞きませんでした。
補足情報(FW/ツールのバージョンなど)
OS: Windows10
環境:VisualStudio 2019
バージョン:OpenCV 4.4.0
補足情報ですが、文字化けする文字が毎回違います。
例えば、「X{・」と化けたり、「(・」とばけたり、「UxD・」と化けたり。実行のたびに文字の化け方が変わっています。もはやポインタを正しく渡せていないのかと予想が立てていますが、原因はわかっていません。「X邀」のような意味不明な漢字が出てきたりもするので、Shift-JIS? で書き込んでいるようにも見えます。
ちなみに、writer.open関数のソースコードをコピーして関数として自分のソースコードの中に組み込みましたが、filenameの受け渡しで文字化けが発生していることはありませんでした。
もともとbuildされているOpenCV実行ファイルたちがShift-JISで読み込んでいるのでしょうか。……謎です。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/09/12 01:21
2020/09/13 02:42
2020/09/13 11:27
2020/09/18 05:34
2020/09/20 08:21 編集