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

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

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

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

Python

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

Q&A

解決済

1回答

5396閲覧

キー入力のタイミングで、webカメラから画像を取り込む

nao99

総合スコア10

OpenCV

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

Python

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

0グッド

0クリップ

投稿2020/04/10 08:41

編集2020/04/13 02:12

キーボード入力、”1”、”2”を押したタイミングで、画像をそれぞれ異なる指定ファイル名で保存したい。

他のサイトを参考に、キーボード入力、”1”、”2”を押したタイミングで画像を保存する迄は出来たが、
下記コードの 8行目、10行目の不要なコード①、②を削除するとプログラムが動作しない。

<不具合>
①、②を削除すると、キーボード入力(”1”、または、”2”)しても、if、elif のどちらへも進みません。

※正常動作(①、②削除前)は、

キーボード入力”1”で、elif処理
キーボード入力”2”で、if処理

されます。

<達成したいこと>
①、②不要なコードを削除して、動作するようにしたい。

import numpy as np import cv2 c = cv2.VideoCapture(0) while True: img = cv2.imread('target0.jpg')     **#不要なコード①** cv2.imshow('image', img)     **#不要なコード②** r, img = c.read()#常時読み込み k = cv2.waitKey(0)&0xff if k == ord('2'):#キーボード”2”入力時 cv2.destroyAllWindows() def Judge_Matching(num):#テンプレートマッチング判定定義 if 0.9 < num: print("OK") cv2.rectangle(target, top_l, bottom_r, (0, 255, 0), 2) # 検出領域を四角で描画 else: print("NG") cv2.rectangle(target, top_l, bottom_r, (0, 0, 255), 2) # 検出領域を四角で描画 temp = cv2.imread('/home/pi/result/temp0.jpg') # テンプレート画像 cv2.imwrite('/home/pi/result/target0.jpg', img) target = cv2.imread('/home/pi/result/target0.jpg') # ターゲット画像 #サーチ範囲指定 s_top = 10 s_bottom = 460 s_left = 20 s_right = 600 target1 = target[s_top : s_bottom, s_left : s_right] cv2.imwrite('/home/pi/result/target1.jpg', target1) r = cv2.matchTemplate(target1, temp, cv2.TM_CCOEFF_NORMED) min_v, max_v, min_l, max_l = cv2.minMaxLoc(r) # 結果から検出領域の位置を取得 top_l = (max_l[0] + s_left, max_l[1] + s_top) # 左上の座標 bottom_r = (top_l[0] + temp.shape[1], top_l[1] + temp.shape[0]) Judg = Judge_Matching(max_v) print(max_v) cv2.rectangle(target, (s_left, s_top), (s_right, s_bottom), (255, 0, 0), 2)#サーチ範囲を四角で描画 cv2.imshow('Judge', target) cv2.imwrite('/home/pi/result/result.jpg',target) cv2.waitKey(1000) elif k == ord('1'):#キーボード”1”入力時 cv2.imwrite('/home/pi/result/test.jpg',img) cv2.destroyAllWindows() cv2.imwrite('/home/pi/result/temp_orign.jpg', img) img1 = img[134 : 233, 173 : 339] cv2.imwrite('/home/pi/result/temp0.jpg', img1) コード

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

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

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

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

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

t_obara

2020/04/13 01:48

それぞれ削除した場合の挙動もご提示ください。
nao99

2020/04/13 02:14

コメント有難うございます。 削除した場合の挙動を追記しました。 宜しくお願い致します。
guest

回答1

0

ベストアンサー

まずはwaitKeyのドキュメントをご覧ください。

https://docs.opencv.org/2.4/modules/highgui/doc/user_interface.html?highlight=waitkey#waitkey

Noteに記載があるように、Windowがないと動作しません。そのWindowを表示するために、cv2.imshow('image', img) が必要なのです。

もしWindowを表示せずに実施しようとするならば、waitKeyではなく、inputを利用すべきです。

投稿2020/04/13 03:25

t_obara

総合スコア5488

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

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

nao99

2020/04/13 05:23

ご回答有難うございます。 waitKey を inputに変更することで先へ進むようになりました。 色々と触っているうちに気付いたのですが・・・・ waitKey または、input を追加することで、カメラ取り込み画像が、過去の画像(数十秒から数分前)が取り込まれてしまいます。 大変申し訳ございませんが、解決法をご回答頂けますと幸いです。
t_obara

2020/04/13 06:50

各処理ステップで時間を出力してどの程度時間がかかっているか、止まっている場所がないかを確認するのが調査する際の手順かと思います。
nao99

2020/04/13 07:56

ステップで進めると、タイミングラグなく進みまして、時間を要しているようではないのです。
t_obara

2020/04/13 09:31

ステップ実行ではなく、各ステップでログなどに時間情報を印字するなどをすることです。ステップ実行では実際の処理時間とは異なるので問題の切り分けができません。
nao99

2020/04/15 02:17

ご回答有難うございます。 特にコードの変更はしていないのですが、問題なく動作するようになりました。 初めに記載すべきことだったのですが、本プログラムは、ラズベリーパイで作成しました。 PCに、そのまま(ファイル保存、書き込み場所のみ変更)で動作させると、 エラーが出てしまいます。 ”1”または、”2”の何れか1回入力迄は、正常に動作するのですが、 2回目入力すると、以下エラーが発生します。 error: OpenCV(4.1.2) D:\Build\OpenCV\opencv-4.1.2\modules\imgcodecs\src\loadsave.cpp:715: error: (-215:Assertion failed) !_img.empty() in function 'cv::imwrite' 一度しか読み込まれていないと言うことでしょうか?
t_obara

2020/04/15 07:10

最終的なコードがどのようになっているかわからないので、別の質問にしてご確認されてはいかがですか?
nao99

2020/04/15 08:44

有難うございます。 そうします。
3265462164

2020/05/19 03:25

t_obara ← これ、まともな回答出来ない冷やかしですよ いつもURL貼るだけ 相手にする必要無いでしょう
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問