質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.37%
Visual C++

Microsoft Visual C++はWindowsのCとC++の統合開発環境(IDE)であり、コンパイラやデバッガを含んでいます。

OpenCV

OpenCV(オープンソースコンピュータービジョン)は、1999年にインテルが開発・公開したオープンソースのコンピュータビジョン向けのクロスプラットフォームライブラリです。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

解決済

2回答

6643閲覧

OpenCVをC++で実行中、動画書き込み用ファイル作成(writer.open)時にエラーが発生する。

ChrisMasa

総合スコア1

Visual C++

Microsoft Visual C++はWindowsのCとC++の統合開発環境(IDE)であり、コンパイラやデバッガを含んでいます。

OpenCV

OpenCV(オープンソースコンピュータービジョン)は、1999年にインテルが開発・公開したオープンソースのコンピュータビジョン向けのクロスプラットフォームライブラリです。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

1クリップ

投稿2020/09/11 16:46

編集2020/09/13 11:38

前提・実現したいこと

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 } 31323334 コードはまだ続きますが、デバック中にこの時点で異常終了(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で読み込んでいるのでしょうか。……謎です。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

OpenCVのサンプルでは

string filename = "./live.avi"; // name of the output video file

となっていますが、このまんまでやったらどうなりますか?

20200916追記
もう解決したでしょうか
もしまだなら、

・現在作成してるプロジェクトの構成はDEBUG版で動作させている。
・OpenCVはRelease版をリンクさせてしまっている

といったズレがあったりはしないでしょうか?

投稿2020/09/11 20:17

編集2020/09/15 16:17
yominet

総合スコア187

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ChrisMasa

2020/09/12 01:21

変わらずです。もともとはその形でやっていましたが、ダメだったので変えて今のソースコードにしました。説明不足で申し訳ありません。
yominet

2020/09/13 02:42

modules\videoio\src\cap_images.cpp にソースがあるので見ることできるのですがとくに難しいことやっていない。 ファイルパスが正常か確認してアラートが出すようなので、 引き渡した時点で文字化けしてる感じがします。 VideoWriter以外でも文字化けしないか? OpenCVの関数以外でも文字化けしないか? 確認してみてはいかがでしょうか
ChrisMasa

2020/09/13 11:27

ありがとうございます。 ofstream関数など、フォルダ作成・ファイル作成・ファイル書き込みでは問題ありませんでした。 また、OpenCV内部の関数を確認して一部ソースコードをmainに組み込んでみましたが、ファイルの受け渡しは問題ありませんでした。 また、詳細に追記しますが、”文字化けする文字が毎回違う”という問題がありましたので、もはや正しくポインタが渡せていない可能性もあると思えてきました。
ChrisMasa

2020/09/18 05:34

追記に対してです。 まだ解決していません。 基本的にDEBUG版で動作させていますので、確認してみたいと思います!
ChrisMasa

2020/09/20 08:21 編集

解決しました!! yominetさんの追記の通り、原因はプロジェクトのプロパティでした。 以下、問題だった箇所です。 間違えていた設定箇所は「リンカ -> 入力 -> 追加の依存ファイル」 内容は、「~;opencv_world440d.lib;」と設定しなければならないところ、「~;opencv_world440.lib;opencv_world440d.lib;」と、リリース版とデバッグ版の両方を組み込んでいたことのようです。おそらく、最初に書かれているファイルが読み込まれていたのでしょう。デバッグモードでリリース版を読み込んでいたので、意味の分からない挙動をしていたのだと思います。 初歩的なミスで申し訳ありませんでした。 しかし、バグがどこにあるのか途方に暮れていたので、本当に助かりました。 ありがとうございます!!
guest

0

[回答ではなくてゴメンナサイ]

writer.open(filename.c_str(), ...
あるいは
writer.open("live.avi", ...
でもバケますか?

投稿2020/09/11 18:26

episteme

総合スコア16612

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ChrisMasa

2020/09/12 01:32

ダメです。治りません。。。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.37%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問