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

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

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

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

Python 3.x

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

Python

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

Q&A

解決済

2回答

456閲覧

PythonのOpencvで赤を認識するプログラムで読み込みの仕方がわからない

hokahomu

総合スコア38

OpenCV

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

Python 3.x

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

Python

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

0グッド

0クリップ

投稿2018/11/24 01:54

編集2018/11/24 02:25

前提・実現したいこと

こんにちは。初めて質問をさせていただきます。読みにくい場所多々あると思いますがご了承ください。
初めてPythonを用いてプログラムを組んでいるので、とても初歩的なミスかもしれませんが、Python3.7でこちら(pythonで赤い物体を認識しよう)のサイトを参考に赤色のものを認識するプログラムを作っているのですが、どの場所で画像を読み込めばいいのかわかりません。自分なりに考え読み込ませてもエラーが発生してしまいます。どうか解決方法を教えてください。

発生している問題・エラーメッセージ

Traceback (most recent call last): File "C:\Users\user\source\repos\PythonApplication1\PythonApplication1\PythonApplication1.py", line 20, in <module> find_rect_of_target_color(image) File "C:\Users\hokah\user\repos\PythonApplication1\PythonApplication1\PythonApplication1.py", line 11, in find_rect_of_target_color contours, _ = cv2.findContours(mask, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE) ValueError: too many values to unpack (expected 2)

該当のソースコード

Python

1import cv2 2import numpy as np 3 4 5def find_rect_of_target_color(image): 6 hsv = cv2.cvtColor(image, cv2.COLOR_BGR2HSV_FULL) 7 h = hsv[:, :, 0] 8 s = hsv[:, :, 1] 9 mask = np.zeros(h.shape, dtype=np.uint8) 10 mask[((h < 20) | (h > 200)) & (s > 128)] = 255 11 contours, _ = cv2.findContours(mask, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE) 12 rects = [] 13 for contour in contours: 14 approx = cv2.convexHull(contour) 15 rect = cv2.boundingRect(approx) 16 rects.append(np.array(rect)) 17 return rects 18 19image=cv2.imread('D:\image\a.png',1) 20find_rect_of_target_color(image) 21cv2.imshow('image',image)

試したこと

imageに画像ファイルを読み込んでからfind_rect_of_target_color(image)を書き、その後に画像の出力を試みた

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

Python3.7
opencv-python(3.4.3.18)

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

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

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

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

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

guest

回答2

0

自己解決

しっかりとサイトを読み、内蔵カメラを起動し認識することができました。
自分の確認が足りていませんでした...

投稿2018/11/27 23:34

hokahomu

総合スコア38

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

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

0

findContours関数は2つではなく3つの戻り値を返すので_,contours,_ = cv2.findContours(~とすればよいです。
参考:【OpenCV; Python】findcontours関数のまとめ

投稿2018/11/24 02:25

can110

総合スコア38266

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

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

hokahomu

2018/11/24 02:37

回答ありがとうございます。 findContoursの部分を直してエラーは発生しなくなったのですが、画像の出力が一瞬で消えてしまうためwaitKey(0)とdestroyAllWindows()を入力したのですが出力された画像が入力した画像と一緒になってしまうのですが何がいけないのでしょうか Pythonの事がよくわからないので初歩的なことかもしれませんがよろしくお願いします。
can110

2018/11/24 02:40

修正コードが不明なので何とも言えませんが まずは画像のみを表示する→画像の上に簡単な図形を重ねて表示する ような単純なプログラムを積み重ねて作成してみることをお勧めします。
hokahomu

2018/11/24 02:56

修正したコードは import cv2 import numpy as np def find_rect_of_target_color(image): hsv = cv2.cvtColor(image, cv2.COLOR_BGR2HSV_FULL) h = hsv[:, :, 0] s = hsv[:, :, 1] mask = np.zeros(h.shape, dtype=np.uint8) mask[((h < 20) | (h > 200)) & (s > 128)] = 255 contours, _ = cv2.findContours(mask, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE) rects = [] for contour in contours: approx = cv2.convexHull(contour) rect = cv2.boundingRect(approx) rects.append(np.array(rect)) return rects image=cv2.imread('D:\image\a.png',1) find_rect_of_target_color(image) cv2.imshow('image',image) cv2.imshow('image',image) cv2.waitKey(0) cv2.destroyAllWindows() になります 画像のみ表示のプログラムはやったことあるのですが、上に図形を重ねて表示するプログラムはやったことないので組んでみたいと思います。
can110

2018/11/24 03:01

import cv2 image=cv2.imread('~.png',1) cv2.imshow('image',image) cv2.waitKey(0) cv2.destroyAllWindows() で画像が表示できます。 段階的にプログラミングを進めていくことで基本が身につき応用が利くようになります。
hokahomu

2018/11/24 03:38

画像を表示するプログラムは理解しているのですが、この関数を使った後の画像の表示がわからないのですがどうすればいいのでしょうか 基本のプログラムももっとやっていきたいと思います。
can110

2018/11/24 04:01

問題(分からないこと)と解(欲しいもの)を整理しましょう。 タイトルでは「読み込みの仕方がわからない」とありますが、「何の」読込の仕方が分からないのでしょうか? また、このコメント欄では「この関数を使った後の画像」の表示の仕方が分からないと記述されていますが、「画像の読込」はできたということでしょうか? また、そもそもその「画像」とはどのようなモノだと仮定していますか? あるいはその関数の動作は理解されていますか? 上記を段階的に考えて具体的になったら 質問本文に追記、あるいは別質問を立てられることをお勧めします。
hokahomu

2018/11/27 08:27

そうですね、そうさせていただきます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問