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

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

新規登録して質問してみよう
ただいま回答率
85.50%
OpenCV

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

C++

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

Q&A

解決済

2回答

3168閲覧

OpenCV C++ のキー入力を連続で実行し画像保存を連続でしたい

hikaparo

総合スコア17

OpenCV

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

C++

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

0グッド

1クリップ

投稿2018/11/20 10:52

opencvでwebカメラを起動しキャプチャした画像を連続で保存したいと思い検索しているとwebカメラを起動するプログラムは見つけ、
画像保存もできるようになったのですが一度しか保存できず、連続して保存したいと思いました。
画像保存キーがSに設定されているのですが一度押すと1枚しか保存されず2枚目は保存されませんでした。
どうすればいいのかわからず困っているところです。
よろしくお願いします 〇┓ペコ

C++

1#include "opencv2/opencv.hpp" 2 3int main(int argh, char* argv[]) 4{ 5 cv::VideoCapture cap(0); 6 7 if (!cap.isOpened()) //正常かの確認 8 { 9 return -1; 10 } 11 12 while (1) 13 { 14 cv::Mat frame; 15 cap >> frame; 16 17 18 //取得したフレーム画像に対してクレースケール変換や2値化などの処理を書き込む欄 19 20 21 cv::imshow("取得画像", frame);//画像表示. 22 23 int key = cv::waitKey(1); 24 if (key == 113)//q押下時 25 { 26 break; 27 } 28 else if (key == 115)//s押下時 29 { 30 //画像保存 31 cv::imwrite("1.png", frame); 32 } 33 } 34 cv::destroyAllWindows(); 35 return 0; 36}

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

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

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

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

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

guest

回答2

0

ベストアンサー

C++

1 //画像保存 2 cv::imwrite("1.png", frame);

画像を保存する際にファイル名が固定であるため、キャプチャしたフレームをどんどん上書き保存してしまっています。

連番にするなら、以下のような感じかと思います。

C++

1#include <sstream> 2(中略) 3 4 int num=1; 5 while (1) 6 { 7 cv::Mat frame; 8 cap >> frame; 9 10 cv::imshow("取得画像", frame);//画像表示. 11 12 int key = cv::waitKey(1); 13 if (key == 113)//q押下時 14 { 15 break; 16 } 17 else if (key == 115)//s押下時 18 { 19 //画像保存 20       std::stringstream ss; 21 ss << num << ".png"; 22 cv::imwrite(ss.str(), frame); 23 num++; 24 } 25 }

投稿2018/11/20 11:04

kazto

総合スコア7196

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

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

hikaparo

2018/11/20 11:17

C2065 'ss': 定義されていない識別子です。 C2065 'ss': 定義されていない識別子です。 C2065 'ss': 定義されていない識別子です。 C2065 'std::stringstream': 定義されていない識別子です。 C2146 構文エラー: ';' が、識別子 'ss' の前に必要です。 E0020 識別子 "std::stringstream" が定義されていません というエラーが発生するようです・・
kazto

2018/11/20 11:19

一行目のインクルード文をちゃんと関数外に記載しましたでしょうか。
kazto

2018/11/20 11:20

あ、違う。 'std::stringstream': `::`が全角になっています。
hikaparo

2018/11/20 11:23

できました!ありがとうございます!!(><;)
guest

0

これ書き込みファイル名が固定値 1.png だから2枚め以降上書きされてないか?

投稿2018/11/20 11:05

kokawa2003

総合スコア217

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

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

hikaparo

2018/11/20 11:23

そのようでした!回答ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問