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

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

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

Anacondaは、Python本体とPythonで利用されるライブラリを一括でインストールできるパッケージです。環境構築が容易になるため、Python開発者間ではよく利用されており、商用目的としても利用できます。

NumPy

NumPyはPythonのプログラミング言語の科学的と数学的なコンピューティングに関する拡張モジュールです。

OpenCV

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

Python 3.x

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

Python

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

Q&A

解決済

1回答

1945閲覧

画像をグリッド分割してHSV値を求めたい

JamesJohn

総合スコア4

Anaconda

Anacondaは、Python本体とPythonで利用されるライブラリを一括でインストールできるパッケージです。環境構築が容易になるため、Python開発者間ではよく利用されており、商用目的としても利用できます。

NumPy

NumPyはPythonのプログラミング言語の科学的と数学的なコンピューティングに関する拡張モジュールです。

OpenCV

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

Python 3.x

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

Python

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

0グッド

0クリップ

投稿2020/10/10 16:16

編集2020/12/09 00:34

前提・実現したいこと

pythonで画像を分割して,分割した画像毎にHSV値を求め,可視化したいです.
他の解答者様(tiitoi様)の解答のコードを拝見したのですが(以下のコード),依然エラーが出てしまい参考にさせていただきたいのですが上手くいかない状態です.
channelsをどのように定義するといいのかよく分からないです.
初めての質問で至らぬ点がありますが,どなたかご教授願います.

import cv2 import matplotlib.pyplot as plt import numpy as np def split_imgs(img, hsplits=3, vsplits=3): h, w = img.shape[:2] crop_img = img[: h // vsplits * vsplits, : w // hsplits * hsplits] return np.array( [x for h_img in np.vsplit(crop_img, vsplits) for x in np.hsplit(h_img, hsplits)] ) def hsv_hist(img): # HSV 色空間に変換する。 hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV) # 各チャンネルのヒストグラムを計算する。 hists = [] for ch in range(3): hist = cv2.calcHist([hsv], [ch], None, [256], [0, 256]) hists.append(hist) return hists # 画像を読み込む。 hsplits = 3 # 横方向の分割数 vsplits = 3 # 縦方向の分割数 img = cv2.imread("17.4.png") # 画像を分割する。 sub_imgs = split_imgs(img, hsplits, vsplits) print(sub_imgs.shape) # (9, 140, 186, 3) # 各画像のヒストグラムを取得する。 hists = np.array([hsv_hist(x) for x in sub_imgs]) print(hists.shape) # (9, 3, 256, 1) # ヒストグラムを描画する。 ch_names = {0: "H", 1: "S", 2: "V"} fig, axes = plt.subplots(hsplits, vsplits, figsize=(10, 10)) for ax, hsv_hist in zip(axes.ravel(), hists): # 各ヒストグラムを描画する。 for hist, [ch] in zip(hsv_hist, channels): ax.plot(hist, label=ch_names[ch]) ax.set_xlim([0, 256]) ax.set_xlabel("Pixel Value") ax.legend() plt.show()

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

このように'channels'が定義されていないと表示されており,うまくいかない状況です.

--------------------------------------------------------------------------- NameError Traceback (most recent call last) <ipython-input-38-4513b313dd4e> in <module> 45 # 各ヒストグラムを描画する。 46 ---> 47 for hist, [ch] in zip(hsv_hist, channels): 48 ax.plot(hist, label=ch_names[ch]) 49 ax.set_xlim([0, 256]) NameError: name 'channels' is not defined

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

python 3.7.6

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

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

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

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

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

attakei

2020/10/10 17:19

> 他の解答者様(tiitoi様)の解答のコードを拝見したのですが(以下のコード),依然エラーが出てしまい参考にさせていただきたいのですが上手くいかない状態です. 参考にした回答コードがある質問のURLがあると、他の回答者の方も比較確認などがしやすいと思います。
guest

回答1

0

ベストアンサー

引用元はこれでしょうか?
https://teratail.com/questions/192394

下記のように修正してみました。

diff

1# 各ヒストグラムを描画する。 2 3- for hist, [ch] in zip(hsv_hist, channels): 4+ for hist, ch in zip(hsv_hist, range(3)):

投稿2020/10/11 00:32

sfdust

総合スコア1135

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

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

JamesJohn

2020/10/11 05:06 編集

はい,そちらから引用させていただきました. 本当にありがとうございます. 素人質問で申し訳ないのですが,今3x3で分割していますが,今後はより細かく5x5などにしようと考えております.その際にはrange()の値を変更する必要があるのでしょうか? またこれからさらに区画ごとのHSVそれぞれの平均を求めたいのですが,この場合一度平均するコードを定義して求めるのが宜しいのでしょうか? よろしくお願い致します.
sfdust

2020/10/12 04:44 編集

range(3)はあくまで、H,S,Vの3チャンネルに対応するものなので、変更する必要はないと思います。 hsplits、vsplitsを変えれば分割数は変えられます。 > またこれからさらに区画ごとのHSVそれぞれの平均を求めたいのですが,この場合一度平均するコードを定義して求めるのが宜しいのでしょうか? 申し訳ございませんが、そこまで私はmatplotlibに詳しくありませんので、アプローチややり方については別質問で立てていただいた方がよろしいかと思います。
JamesJohn

2020/10/13 05:48

わかりやすい説明をありがとうございます. 理解できました.
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問