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

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

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

MatplotlibはPythonのおよび、NumPy用のグラフ描画ライブラリです。多くの場合、IPythonと連携して使われます。

Tkinter

Tkinterは、GUIツールキットである“Tk”をPythonから利用できるようにした標準ライブラリである。

Python

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

Q&A

解決済

1回答

2036閲覧

python matplotlibを使用しRGBで描画した画をHSVに変更したい

kzi98

総合スコア2

Matplotlib

MatplotlibはPythonのおよび、NumPy用のグラフ描画ライブラリです。多くの場合、IPythonと連携して使われます。

Tkinter

Tkinterは、GUIツールキットである“Tk”をPythonから利用できるようにした標準ライブラリである。

Python

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

0グッド

1クリップ

投稿2020/08/22 04:18

編集2020/08/22 05:53

前提・実現したいこと

matplotlibのRGBで描画された画をHSV形式に変換したいです。
プログラムの中身ですが、色と形をランダムに表示し、tkinter上でbuttonを押す操作をするごとに画が更新されていくというものになります。
現在は色をランダムに発生させるためにRGBをそれぞれrandom.random()として0~1で表現させています。
ソースコードにありますように、RGBからHSVへ変えるというmatplotlib.colorsモジュールの関数であるmatplotlib.colors.rgb_to_hsv()を使用してみたのですがうまく作動せず、画像を表示させることができずにいます。
エラーメッセージ等はでてきません。
有識者の方ご教授いただけないでしょうか。

該当のソースコード

Python

1import sys 2import tkinter 3import numpy as np 4import random 5import matplotlib.pyplot as plt 6from mpl_toolkits.mplot3d import Axes3D 7from matplotlib.backends.backend_tkagg import (FigureCanvasTkAgg, NavigationToolbar2Tk) 8from matplotlib.figure import Figure 9import matplotlib.colors as mcolors 10 11 12def draw(event): 13 fig = plt.figure(figsize=(4,4)) 14 ax=fig.gca(projection='3d') 15 16 ax.set_xlim([-1., 1.]) 17 ax.set_ylim([-1., 1.]) 18 ax.set_zlim([-1., 1.]) 19 20 for a in [ax.xaxis, ax.yaxis, ax.zaxis]: 21 a.set_ticklabels([]) 22 a._axinfo['grid']['linewidth'] = 0 23 a._axinfo['tick']['linewidth'] = 0 24 25 for a in [ax.w_xaxis, ax.w_yaxis, ax.w_zaxis]: 26 a.line.set_linewidth(0) 27 a.set_pane_color((0., 0., 0., 0.)) 28 #順にRGBA 29 30 ax.set_facecolor('black') 31 32 u, v = np.mgrid[0:2*np.pi:50j, 0:np.pi:25j] 33 34 x = np.cos(u) * np.sin(v) 35 y = np.sin(u) * np.sin(v) 36 z = np.cos(v) 37 38 39 R=random.random() 40 G=random.random() 41 B=random.random() 42 43 colors = np.zeros((50, 25, 3)) 44 for i in range(0, 25): 45 for j in range(0, 25): 46 colors[i][j][0] = R 47 colors[i][j][1] = G 48 colors[i][j][2] = B 49 50 colors2=mcolors.rgb_to_hsv(mcolors.to_rgb(colors)) 51 52 ax.plot_surface(x, y, z, facecolors = colors2, shade = False) 53 54 moon=random.randint(-90,270) 55 56 ax.view_init(elev = 0, azim = moon) 57 58 canvas = FigureCanvasTkAgg(fig, master=root) 59 canvas.get_tk_widget().place(x=0,y=0) 60 61root = tkinter.Tk() 62root.geometry("800x600") 63root.wm_title("色と形をランダムに表示する") 64 65button= tkinter.Button(root, text=u'更新',width=15) 66button.bind("<Button-1>",draw) 67button.place(x=300,y=450) 68 69tkinter.mainloop()

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

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

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

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

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

guest

回答1

0

自己解決

正しいかはわかりませんがcolorsysモジュールを使用し、

colorH,colorS,colorV = colorsys.rgb_to_hsv(a, b, c) print(colorH*360) print(colorS*100) print(colorV*100)

としたところ一応うまく変換ができました。
質問をご覧頂き考えてくださった方、ありがとうございました。

投稿2020/08/22 08:14

kzi98

総合スコア2

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問