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

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

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

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

Q&A

1回答

1514閲覧

red,yellow,blueがカウントできません。

69Y5Sa5Qks0vZrW

総合スコア1

Python

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

0グッド

0クリップ

投稿2020/06/11 06:48

編集2022/01/12 10:55

python

1import matplotlib.pyplot as plt 2from matplotlib.patches import Polygon 3import numpy as np 4import cv2 5from IPython.display import Image 6Image(filename='sample.jpg') 7 8img = cv2.imread("sample.jpg") 9 10hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV) 11 12lower_color = np.array([20, 80, 10]) 13upper_color = np.array([50, 255, 255]) 14 15mask = cv2.inRange(hsv, lower_color, upper_color) 16output = cv2.bitwise_and(hsv, hsv, mask=mask) 17 18cv2.imwrite("sample2.jpg", output) 19Image(filename='sample2.jpg') 20 21 22image_file = 'sample10.jpg' 23Image(filename=image_file) 24 25 26img = cv2.imread(image_file) 27 28hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV) 29 30red = cv2.inRange(hsv, np.array([145, 70, 0]), np.array([180, 255, 255])) 31yellow = cv2.inRange(hsv, np.array([10, 80, 0]), np.array([50, 255, 255])) 32blue = cv2.inRange(hsv, np.array([108, 121, 0]), np.array([120, 255, 255])) 33 34kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (3, 3)) 35 36bin_imgs = {'red': red, 'yellow': yellow, 'blue': blue} 37 38fig, axes_list = plt.subplots(3, 1, figsize=(10, 18)) 39 40for ax, (label, bin_imgs) in zip(axes_list.ravel(), bin_imgs.items()): 41 ax.axis('off') 42 ax.set_title(label) 43 ax.imshow(bin_imgs, cmap=plt.cm.gray) 44plt.show() 45 46fig, ax = plt.subplots(figsize=(12, 10)) 47ax.axis('off') 48ax.imshow(cv2.cvtColor(img, cv2.COLOR_BGR2RGB)) 49 50for label, bin_img in bin_imgs.items(): 51 _, contours, _ = cv2.findContours( 52 bin_img, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE) 53 contours = list(filter(lambda cnt: len(cnt) > 1, contours)) 54 count = len(contours) 55 56 print('color = {} conunt: {}'.format(label, count)) 57 58 for cnt in contours: 59 cnt = np.squeeze(cnt, axis=1) 60 ax.add_patch(Polygon(cnt, fill=None, lw=2., color=label)) 61plt.show() 62

Traceback (most recent call last): File "sotuken.py", line 50, in <module> for label, bin_img in bin_imgs.items(): AttributeError: 'numpy.ndarray' object has no attribute 'items'
エラーメッセージです。
どこを直せばよろしいでしょうか?

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

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

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

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

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

hope_mucci

2020/06/11 08:52

本文のソースとエラーが発生した実行時のソースが違っていませんでしょうか? 50行目の内容が本文ソースとエラーメッセージで異なっています。
69Y5Sa5Qks0vZrW

2020/06/12 01:16

Traceback (most recent call last): File "sotuken.py", line 50, in <module> for label, bin_img in bin_imgs.items(): AttributeError: 'numpy.ndarray' object has no attribute 'items' すいません… こっちでした。改めて宜しくお願いします。
hope_mucci

2020/06/12 02:41

なるほど。本文をそちらのメッセージに修正してくださいね。
guest

回答1

0

40行目でbin_imgsをfor文の中で壊しています。

python

1for ax, (label, bin_imgs) in zip(axes_list.ravel(), bin_imgs.items()): 2 ^^^^^^^^ココ ^^^^^^^^^ココ

bin_imgs自身をbin_imgs.items()の結果(のvalue側)で置き換えてしまっているので後の処理に影響が出ます。
変数名のつけ方には重々注意しましょう。これが警告にもエラーにもならないのはちょっと怖いですね。

投稿2020/06/12 03:04

hope_mucci

総合スコア4447

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問