🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
OpenCV

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

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

2308閲覧

WEBカメラでリアルタイムで撮影した画像を連番保存したいです

ken248

総合スコア24

OpenCV

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

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2020/12/21 01:15

編集2020/12/21 02:24

WEBカメラでリアルタイムで撮影した画像を連番保存したいです。
画像の保存までは以下のコードでできていますが、
連番というところでつまづいております。
(エラーというよりも方法がわからないです。)

工夫点してみたこと

digit = len(str(int(cap.get(cv2.CAP_PROP_FRAME_COUNT))))
cv2.imwrite('{}{}{}.{}'.format(base_path, datetime.datetime.now().strftime('%Y%m%d%H%M'), digit, ext), frame)
→保存画像のファイル名:capture_202012211018_2.png

②cv2.imwrite('{}{}{}.{}'.format(base_path, datetime.datetime.now().strftime('%Y%m%d%f'), f{i:03d},ext), frame)
→f{i:03d}が名称NGで実行できない
表示されるエラー内容
File "c:\Users\takamatsu-k\Desktop\change_gui\logicool4.py", line 29
cv2.imwrite('{}{}{}.{}'.format(base_path, datetime.datetime.now().strftime('%Y%m%d%f'), f{i:03d},ext), frame) ^
SyntaxError: invalid syntax

私の目標としては
capture_202012211018_1.png
capture_202012211018_2.png
...
capture_202012211018_n.png
です

どうかご教授お願いいたします。

python

1 2import cv2 3import os 4import datetime 5 6org_dir = "C:/Users//Desktop/change_gui" 7 8def save_frame_camera_cycle(device_num, basename, cycle, ext='png', delay=1, window_name='frame'): 9 cap = cv2.VideoCapture(0) 10 11 if not cap.isOpened(): 12 return 13 14 fld_dir = org_dir + '\try\' 15 os.makedirs(fld_dir, exist_ok=True) 16 base_path = os.path.join(fld_dir, basename) 17 18 19 20 n = 0 21 while True: 22 ret, frame = cap.read() 23 cv2.imshow(window_name, frame) 24 if cv2.waitKey(delay) & 0xFF == ord('q'): 25 break 26 if n == cycle: 27 n = 0 28 cv2.imwrite('{}_{}.{}'.format(base_path, datetime.datetime.now().strftime('%Y%m%d%H%M'), ext), frame)#ファイル名が同じ時間 29 30 31 n += 1 32 33 cv2.destroyWindow() 34 35 36save_frame_camera_cycle(0, 'capture', 50)

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

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

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

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

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

y_waiwai

2020/12/21 01:21

提示のコードではどういう不具合があるんでしょうか。 具体例を示してください
ken248

2020/12/21 01:45

最終的に出力したいファイル名が {}_{}_{}.{}'.format(base_path, datetime.datetime.now().strftime('%Y%m%d%H%M'), 撮影枚数(連番), ext) なのですが、現状は {}_{}.{}'.format(base_path, datetime.datetime.now().strftime('%Y%m%d%H%M'), ext) までしか私ができていません。
y_waiwai

2020/12/21 01:51

その結果はどうなって、どこがまずくて、それがどうなればいいという話なんでしょうか 今のままでは正解が全くわかりません
ken248

2020/12/21 02:25

書き直してみました。 私の目標としては capture_202012211018_1.png capture_202012211018_2.png ... capture_202012211018_n.png です.
guest

回答1

0

ベストアンサー

質問内容に対しての回答としてはそぐわないかもしれませんが…
VideoWriterが(動画ではなく)連番画像でも保存できるみたいなので,「連番」部分はこいつに任せてしまうという方法もあるかと.

投稿2020/12/21 02:30

fana

総合スコア11985

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

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

ken248

2020/12/21 03:10

ありがとうございます! 調べてもすぐには分からなかったのですが、参考サイト等ございますか?
fana

2020/12/21 03:20

OpenCVが提供している物だから,,まずは公式リファレンスなりを見ればよいのでは.
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問