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

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

詳細はこちら
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Raspberry Pi

Raspberry Piは、ラズベリーパイ財団が開発した、名刺サイズのLinuxコンピュータです。 学校で基本的なコンピュータ科学の教育を促進することを意図しています。

Q&A

解決済

1回答

5594閲覧

valueError:not enough values to unpack (expected 3, got 2)

makoto1111

総合スコア1

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Raspberry Pi

Raspberry Piは、ラズベリーパイ財団が開発した、名刺サイズのLinuxコンピュータです。 学校で基本的なコンピュータ科学の教育を促進することを意図しています。

0グッド

0クリップ

投稿2020/11/23 14:47

編集2020/11/23 17:17

前提・実現したいこと

以下のサイトを実行したい
リンク内容
ここに質問の内容を詳しく書いてください。
私はラズパイで動作検知ができるカメラをつくりたいと考えています。

エラー文を調べたら「変数の数と要素の数が一致していない」とこのエラーが出ると書いてあったのですがどのように
編集していけば良いかわかりません。

エラーメッセージ Traceback(most recent call last): File "security_cam_motion.py", line87, in <module> image,contours, hierarchy = cv.findContours(thresh.copy(),cv.RETR_EXTERNAL, cv.CHAIN_APPROX_SIMPLE) ValueError: not enough values to unpack (expected 3, got 2)

該当のソースコード

ソースコード # -*- coding: utf-8 -*- import time import datetime import cv2 as cv # WEBカメラを使って監視カメラを実現するプログラム # 動体検知、そのときの日付時刻を埋め込んだjpgファイルを保存する #画像を保存するディレクトリ save_dir = './image/' #ファイル名は日付時刻を含む文字列とする #日付時刻のあとに付加するファイル名を指定する fn_suffix = 'motion_detect.jpg' # VideoCaptureのインスタンスを作成する。 cap = cv.VideoCapture(0) #縦と横の解像度指定 cap.set(cv.CAP_PROP_FRAME_WIDTH, 640) cap.set(cv.CAP_PROP_FRAME_HEIGHT, 480) #2値化したときのピクセルの値 DELTA_MAX = 255 #各ドットの変化を検知するしきい値 DOT_TH = 20 #モーションファクター(どれくらいの点に変化があったか)が #どの程度以上なら記録するか。 MOTHON_FACTOR_TH = 0.20 #比較用のデータを格納 avg = None while True: ret, frame = cap.read() # 1フレーム読み込む motion_detected = False # 動きが検出されたかどうかを示すフラグ dt_now = datetime.datetime.now() #データを取得した時刻 #ファイル名と、画像中に埋め込む日付時刻 dt_format_string = dt_now.strftime('%Y-%m-%d %H:%M:%S') f_name = dt_now.strftime('%Y%m%d%H%M%S%f') + "_" + fn_suffix # モノクロにする gray = cv.cvtColor(frame, cv.COLOR_BGR2GRAY) #比較用のフレームを取得する if avg is None: avg = gray.copy().astype("float") continue # 現在のフレームと移動平均との差を計算 cv.accumulateWeighted(gray, avg, 0.6) frameDelta = cv.absdiff(gray, cv.convertScaleAbs(avg)) # デルタ画像を閾値処理を行う thresh = cv.threshold(frameDelta, DOT_TH, DELTA_MAX, cv.THRESH_BINARY)[1] #モーションファクターを計算する。全体としてどれくらいの割合が変化したか。 motion_factor = thresh.sum() * 1.0 / thresh.size / DELTA_MAX motion_factor_str = '{:.08f}'.format(motion_factor) #画像に日付時刻を書き込み cv.putText(frame,dt_format_string,(25,50),cv.FONT_HERSHEY_SIMPLEX, 1.5,(0,0,255), 2) #画像にmotion_factor値を書き込む cv.putText(frame,motion_factor_str,(25,470),cv.FONT_HERSHEY_SIMPLEX, 1.5,(0,0,255), 2) #モーションファクターがしきい値を超えていれば動きを検知したことにする if motion_factor > MOTHON_FACTOR_TH: motion_detected = True # 動き検出していれば画像を保存する if motion_detected == True: #save cv.imwrite(save_dir + f_name, frame) print("DETECTED:" + f_name) # ここからは画面表示する画像の処理 # 画像の閾値に輪郭線を入れる image, contours, hierarchy = cv.findContours(thresh.copy(), cv.RETR_EXTERNAL, cv.CHAIN_APPROX_SIMPLE) frame = cv.drawContours(frame, contours, -1, (0, 255, 0), 3) # 結果の画像を表示する cv.imshow('camera', frame) # 何かキーが押されるまで待機する k = cv.waitKey(1000) #引数は待ち時間(ms) if k == 27: #Esc入力時は終了 break print("Bye!\n") # 表示したウィンドウを閉じる cap.release() cv.destroyAllWindows()

試したこと

まだpythonの初心者で何をすればよいかわかりませんでした。

補足情報(FW/ツールのバージョンなど)

Raspberry Pi 4
python3.7.3

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

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

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

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

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

meg_

2020/11/23 14:51

・リンクは「リンクの挿入」で記入してください。 ・エラーはどの行で発生しましたか?
makoto1111

2020/11/23 17:13

Traceback(most recent call last): File "security_cam_motion.py", line87, in <module> image,contours, hierarchy = cv.findContours(thresh.copy(),cv.RETR_EXTERNAL, cv.CHAIN_APPROX_SIMPLE) ValueError: not enough values to unpack (expected 3, got 2)
makoto1111

2020/11/23 17:14

以上がエラーの全文です。87行でエラーが発生しました
guest

回答1

0

ベストアンサー

cv2(opencv)のバージョンによって戻り値の数が異なるようです。お使いのバージョンを確認してください。

findContours()には第1引数に対象の画像を渡し、第2引数に輪郭の抽出モード、第3引数に輪郭を近似する方法(検出する方法)を指定します。出力は輪郭画像、輪郭、輪郭の階層情報が返されるので、image、contours、hierarchyの変数に格納します。(OpenCV4と使っている場合は、contours, hierarchy = cv2.findContours()の2つが返されると言う違いがあります)

【Python】OpenCVで輪郭の検出 – findContours(), drawContours()

投稿2020/11/23 22:40

meg_

総合スコア10736

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

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

makoto1111

2020/11/24 15:24

cv2(opencv)のバージョンは4.1.1でした。
makoto1111

2020/11/24 15:29

返信ありがとうございます
makoto1111

2020/11/24 15:35

バージョンが4.1.1だとどのようにすれば良いでしょうか?
meg_

2020/11/25 00:10

image, contours, hierarchy のところをcontours, hierarchy にすれば良いかと思います。
makoto1111

2020/11/25 03:31

ありがとうございます指摘していただいたところをなおしたところ正常に動きました
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問