前提・実現したいこと
Pythonを使っています
画像内に様々な色の粒子がある画像を読み込み画像内の粒子の数をヒストグラムにし表したいです。
画像内の粒子をカウントすることまでは行えたのですが、そこからグラフを書くことができません。
発生している問題・エラーメッセージ
該当のソースコード
Python
ソースコード
import cv2
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.patches import Polygonimg=cv2.imread('E:/opencv/104.png')
hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV) # HSV 色空間に変換
red = cv2.inRange(hsv, np.array([0, 120, 200]), np.array([30, 255, 255]))
green = cv2.inRange(hsv, np.array([30, 120, 200]), np.array([90, 255, 255]))
blue = cv2.inRange(hsv, np.array([90, 121, 204]), np.array([150, 255, 255]))白だけゴミがあるので、収縮演算
kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (3, 3))
bin_imgs = {'syou': red, 'tyuu': green,
... 'dai': blue,}
2値化結果を可視化する。
####################################################
fig, axes_list = plt.subplots(3, 1, figsize=(10, 18))
for ax, (label, bin_img,) in zip(axes_list.ravel(), bin_imgs.items()):
... ax.axis('off')
... ax.set_title(label)
... ax.imshow(bin_img, cmap=plt.cm.gray)
...
(0.0, 1.0, 0.0, 1.0)
Text(0.5, 1.0, 'syou')
<matplotlib.image.AxesImage object at 0x000002A98C8C2580>
(0.0, 1.0, 0.0, 1.0)
Text(0.5, 1.0, 'tyuu')
<matplotlib.image.AxesImage object at 0x000002A98C8FB9A0>
(0.0, 1.0, 0.0, 1.0)
Text(0.5, 1.0, 'dai')
<matplotlib.image.AxesImage object at 0x000002A98C92ADC0>
fig, ax = plt.subplots(figsize=(12, 10))
ax.axis('off')
(0.0, 1.0, 0.0, 1.0)
ax.imshow(cv2.cvtColor(img, cv2.COLOR_BGR2RGB))
<matplotlib.image.AxesImage object at 0x000002A98C94D700>
輪郭検出し、数を求める。
for label, bin_img in bin_imgs.items():
... contours, _ = cv2.findContours(bin_img, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
... count = len(contours)
... print('color: {}, conunt: {}'.format(label, count))
...
color: syou, conunt: 0
color: tyuu, conunt: 3
color: dai, conunt: 3
試したこと
補足情報(FW/ツールのバージョンなど)
色により大きさを表したいので大、中、小と表せるようにしてあります
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/12/28 07:29
2020/12/28 08:09
2020/12/30 05:53