matplotlibのカラーマップを自分で作成する時に起こった問題。
pythonで画像を表示する。
pythonで画像を表示するとき、自分は、matplotlibかpqtgraphを使う。(ほかにもいろいろ方法はある)
両方とも、数値をプロットしたりするときに使うソフト。
詳しい使い方は、ここにある。使う度に毎回参照している。多分一生覚えられない。
例えば、以下のようなコードを実行したとき、
ファイルダイアログが開いて、任意のファイルを開き、画像を表示する。
# coding: Shift_JIS
import matplotlib.pyplot as plt
# 画像表示用の関数1
import matplotlib.image as mpimg
# 画像表示用の関数2
import tkinter.filedialog as tkfd
# ファイルダイアログ用の関数。
f, (ax1) = plt.subplots(1)
# 作図
filename = tkfd.askopenfilename()
#ファイルダイアログを出し、選んだファイルを変数に代入
img1 = mpimg.imread(filename)
#画像
ax1.imshow(img1)
plt.show()
これを、RGB別に分けて表示するには、直感的にはRGBの情報が入った配列(np.array)をこうやってとりだしたい。
img[:,:,0]
上記を使って、下記のようなコードを実行すると、
import numpy as np
# 数値計算ライブラリ
import matplotlib.pyplot as plt
# 画像表示用の関数1
import matplotlib.image as mpimg
# 画像表示用の関数2
import tkinter.filedialog as tkfd
# ファイルダイアログ用の関数。
f, ((ax11,ax12,ax13,), (ax21,ax22,ax23,)) = plt.subplots(2,3)
# 作図
ax11.axis("off")
ax13.axis("off")
filename = tkfd.askopenfilename()
#ファイルダイアログを出し、選んだファイルを変数に代入
img1 = mpimg.imread(filename)
ax12.imshow(img1)
ax21.imshow(img1[:,:,0])
ax22.imshow(img1[:,:,1])
ax23.imshow(img1[:,:,2])
plt.show()
こんな感じになる。
色が付いている。
これは、カラーマップが、良くない。カラーマップがjetというやつだから、こうなった。
cmapとは
前の例を、カラーマップを指定すると、こんな感じにできる。
import numpy as np
# 数値計算ライブラリ
import matplotlib.pyplot as plt
# 画像表示用の関数1
import matplotlib.image as mpimg
# 画像表示用の関数2
import tkinter.filedialog as tkfd
# ファイルダイアログ用の関数。
f, ((ax11,ax12,ax13,), (ax21,ax22,ax23,)) = plt.subplots(2,3)
# 作図
ax11.axis("off")
ax13.axis("off")
filename = tkfd.askopenfilename()
#ファイルダイアログを出し、選んだファイルを変数に代入
img1 = mpimg.imread(filename)
#画像
ax12.imshow(img1)
ax21.imshow(img1[:,:,0], cmap="hot")
ax22.imshow(img1[:,:,1], cmap="summer")
ax23.imshow(img1[:,:,2], cmap="winter")
ax21.set_title("hot")
ax22.set_title("summer")
ax23.set_title("winter")
plt.show()
下側の、図の、タイトルが、cmap。
ぱっと見は、これで完成しているように見えるが…
これじゃない。こうじゃないんだよ!
まず
- 色が濃いはずの部分が、薄くなっている!!
- 色が赤青緑ではない!!!!!!!!!!!
白→赤ないし、黒→赤みたいになってないとダメ。できあいのカラーマップじゃダメ。
なので、任意の二色のグラデーションを作りたい。
matplotlibでの解決方法
公式ではcmapの作り方はここら辺を参考にできる
が、cdictの中身の意味はここを見る必要があるし、公式よりもここの方が参考になるかもしれない。
import matplotlibimport numpy as np
# 数値計算ライブラリ
import matplotlib.pyplot as plt
# 画像表示用の関数1
import matplotlib.image as mpimg
# 画像表示用の関数2
import tkinter.filedialog as tkfd
# ファイルダイアログ用の関数。
cdict = {'red': ((0.0, 0.0, 0.0),(1.0, 1.0, 1.0)),
'green': ((0.0, 0.0, 0.0),(1.0, 0.0, 0.0)),
'blue': ((0.0, 0.0, 0.0),(1.0, 0.0, 0.0))
}
cmap_RtoBRK = matplotlib.colors.LinearSegmentedColormap('my_colormap',cdict,256)
cdict2 = {'red': ((0.0, 0.0, 0.0),(1.0, 0.0, 0.0)),
'green': ((0.0, 0.0, 0.0),(1.0, 1.0, 1.0)),
'blue': ((0.0, 0.0, 0.0),(1.0, 0.0, 0.0))
}
cmap_GtoBRK = matplotlib.colors.LinearSegmentedColormap('my_colormap',cdict2,256)
cdict3 = {'red': ((0.0, 0.0, 0.0),(1.0, 0.0, 0.0)),
'green': ((0.0, 0.0, 0.0),(1.0, 0.0, 0.0)),
'blue': ((0.0, 0.0, 0.0),(1.0, 1.0, 1.0))
}
cmap_BtoBRK = matplotlib.colors.LinearSegmentedColormap('my_colormap',cdict3,256)
f, ((ax11,ax12,ax13,), (ax21,ax22,ax23,)) = plt.subplots(2,3)
# 作図
ax11.axis("off")
ax13.axis("off")
filename = tkfd.askopenfilename()
#ファイルダイアログを出し、選んだファイルを変数に代入
img1 = mpimg.imread(filename)#画像
ax12.imshow(img1)
ax21.imshow(img1[:,:,0], cmap=cmap_RtoBRK)
ax22.imshow(img1[:,:,1], cmap=cmap_GtoBRK)
ax23.imshow(img1[:,:,2], cmap=cmap_BtoBRK)
plt.show()
黒なんか指定した覚えはない。
白い紙に、絵の具を置くと、こうなるでしょ!?
という人は、こっちがいいかも…
import matplotlibimport numpy as np
# 数値計算ライブラリ
import matplotlib.pyplot as plt
# 画像表示用の関数1
import matplotlib.image as mpimg
# 画像表示用の関数2
import tkinter.filedialog as tkfd
# ファイルダイアログ用の関数。
cdict = {'red': ((0.0, 1.0, 1.0),(1.0, 1.0, 1.0)),
'green': ((0.0, 1.0, 1.0),(1.0, 0.0, 0.0)),
'blue': ((0.0, 1.0, 1.0),(1.0, 0.0, 0.0))
}
cmap_RtoBRK = matplotlib.colors.LinearSegmentedColormap('my_colormap',cdict,256)
cdict2 = {'red': ((0.0, 1.0, 1.0),(1.0, 0.0, 0.0)),
'green': ((0.0, 1.0, 1.0),(1.0, 1.0, 1.0)),
'blue': ((0.0, 1.0, 1.0),(1.0, 0.0, 0.0))
}
cmap_GtoBRK = matplotlib.colors.LinearSegmentedColormap('my_colormap',cdict2,256)
cdict3 = {'red': ((0.0, 1.0, 1.0),(1.0, 0.0, 0.0)),
'green': ((0.0, 1.0, 1.0),(1.0, 0.0, 0.0)),
'blue': ((0.0, 1.0, 1.0),(1.0, 1.0, 1.0))
}
cmap_BtoBRK = matplotlib.colors.LinearSegmentedColormap('my_colormap',cdict3,256)
f, ((ax11,ax12,ax13,), (ax21,ax22,ax23,)) = plt.subplots(2,3)
# 作図
ax11.axis("off")
ax13.axis("off")
filename = tkfd.askopenfilename()
#ファイルダイアログを出し、選んだファイルを変数に代入
img1 = mpimg.imread(filename)
#画像
ax12.imshow(img1)
ax21.imshow(img1[:,:,0], cmap=cmap_RtoBRK)
ax22.imshow(img1[:,:,1], cmap=cmap_GtoBRK)
ax23.imshow(img1[:,:,2], cmap=cmap_BtoBRK)
plt.show()
どちらが正しいのか
黒→赤とかが、本来の表現だが…
なぜならば、PCやら、携帯やらをonしていない時、そのディスプレイは、大抵黒。
off時に、黒以外の色になるディスプレイなんて、ブラウン管TVが灰色だったり、GBAとかワンダースワン以来、お目にかかっていない。
ここに、3色のLEDとか液晶とか何かが光って、画面を表示している。
3色全部つくと、白くなる。この光の強さと、値の大きさを対応させているから、黒→色が正しい表現。
しかし、学校とかでは、絵を描く時に、白い紙を配られて、そこに色を置いた。つまり、何もないところは白で、色があるところは赤。
この考え方で行くと、白い紙の上では、白→色が正しい表現になる。
紙と、ディスプレイで、表現の方法が違う。
紙の場合は、光っていない。
ディスプレイの場合は光っている。
この差は大きい。
ただ、PCはディスプレイで見るとはいえ、紙的な表現を心掛けた方がいいと思っている。
なぜならば、印刷時のインク消費量が上がるから。
import matplotlibimport numpy as np
# 数値計算ライブラリ
import matplotlib.pyplot as plt
# 画像表示用の関数1
import matplotlib.image as mpimg
# 画像表示用の関数2
import tkinter.filedialog as tkfd
# ファイルダイアログ用の関数。
cdict = {'red': ((0.0, 1.0, 1.0),(1.0, 1.0, 1.0)),
'green': ((0.0, 1.0, 1.0),(1.0, 0.0, 0.0)),
'blue': ((0.0, 1.0, 1.0),(1.0, 0.0, 0.0))
}
cmap_RtoBRK = matplotlib.colors.LinearSegmentedColormap('my_colormap',cdict,256)
cdict2 = {'red': ((0.0, 1.0, 1.0),(1.0, 0.0, 0.0)),
'green': ((0.0, 1.0, 1.0),(1.0, 1.0, 1.0)),
'blue': ((0.0, 1.0, 1.0),(1.0, 0.0, 0.0))
}
cmap_GtoBRK = matplotlib.colors.LinearSegmentedColormap('my_colormap',cdict2,256)
cdict3 = {'red': ((0.0, 1.0, 1.0),(1.0, 0.0, 0.0)),
'green': ((0.0, 1.0, 1.0),(1.0, 0.0, 0.0)),
'blue': ((0.0, 1.0, 1.0),(1.0, 1.0, 1.0))
}
cmap_BtoBRK = matplotlib.colors.LinearSegmentedColormap('my_colormap',cdict3,256)
cdict12 = {'red': ((0.0, 0.0, 0.0),(1.0, 1.0, 1.0)),
'green': ((0.0, 0.0, 0.0),(1.0, 0.0, 0.0)),
'blue': ((0.0, 0.0, 0.0),(1.0, 0.0, 0.0))
}
cmap_RtoBRK2 = matplotlib.colors.LinearSegmentedColormap('my_colormap',cdict12,256)
cdict22 = {'red': ((0.0, 0.0, 0.0),(1.0, 0.0, 0.0)),
'green': ((0.0, 0.0, 0.0),(1.0, 1.0, 1.0)),
'blue': ((0.0, 0.0, 0.0),(1.0, 0.0, 0.0))
}
cmap_GtoBRK2 = matplotlib.colors.LinearSegmentedColormap('my_colormap',cdict22,256)
cdict32 = {'red': ((0.0, 0.0, 0.0),(1.0, 0.0, 0.0)),
'green': ((0.0, 0.0, 0.0),(1.0, 0.0, 0.0)),
'blue': ((0.0, 0.0, 0.0),(1.0, 1.0, 1.0))
}
cmap_BtoBRK2 = matplotlib.colors.LinearSegmentedColormap('my_colormap',cdict32,256)
f, ((ax11,ax12,ax13), (ax21,ax22,ax23), (ax31,ax32,ax33)) = plt.subplots(3,3)
# 作図
ax11.axis("off")
ax13.axis("off")
filename = tkfd.askopenfilename()
#ファイルダイアログを出し、選んだファイルを変数に代入
img1 = mpimg.imread(filename)
#画像
ax12.imshow(img1)
ax21.imshow(img1[:,:,0], cmap=cmap_RtoBRK)
ax22.imshow(img1[:,:,1], cmap=cmap_GtoBRK)
ax23.imshow(img1[:,:,2], cmap=cmap_BtoBRK)
ax31.imshow(img1[:,:,0], cmap=cmap_RtoBRK2)
ax32.imshow(img1[:,:,1], cmap=cmap_GtoBRK2)
ax33.imshow(img1[:,:,2], cmap=cmap_BtoBRK2)
plt.show()
- 中速フーリエ変換 ~離散フーリエ変換より..
- 断面二次モーメントを、座標点の配列から計..
- 断面二次モーメントを、座標点の配列から計..
- fontファイルの文字データ(グリフ)を..
- matplotlibのpyplot.pl..
- 計算力学技術者試験の問題集 自炊(裁断→..
- pythonで、ホワイトノイズやピンクノ..
- 脳ドッグに行ってきた。→MRIの画像デー..
- matplotlibのimshowで円を..
- matplotlibの、cmapを、徐々..
- matplotlibのmake_axes..
- matplotlib floatinga..
- matplotlib plotの色を、値..
- Pythonで、「二次元フーリエ変換した..
- matplotlibのlinestyle..
- matplotlibのannotateの..
- matplotlibで、x軸とy軸の数字..
- VBAで、pythonのrangeとか、..
- matplotlibのaxes3Dで、a..
- matplotlibのlatexで、行列..
https://ibvilumtumanmau.wixsite.com/tiosanreme/post/bully-anniversary-edition-free-download-ios
https://wakelet.com/wake/IPZ1om1b_rDO8CdHgI1OU
https://wakelet.com/wake/CRlRUSbE_9zGwGIiF-QDK
https://document.onl/economy-finance/rupauls-drag-race-s05e01-720p-or-1080p.html
https://kit.co/siodresjoavor/techsmith-snagit-v12-2-2-file-download-full-version-registration-zip-keygen-64bit
https://vdocuments.mx/hungama-mp4-hd-movie-download.html
https://seesaawiki.jp/dreswebarslo/d/~REPACK~ Dubbed Tte Prima Hd Torrents Mp4 Torrents Watch Online Rip
https://www.homify.in/ideabooks/8481557/samsung-galaxy-s20-colors-all-the-shades-available-for-all-three-phones
https://seesaawiki.jp/moiscarovlet/d/M3 Data Recovery 5.8.6 Standard __FULL__ Free Build Serial Exe Activation
https://wajohnperphotnligi.wixsite.com/teiprotaqdis/post/download-75-insta-event-promo-s-cracked-professional-key-64bit-windows
https://reupecfiarere.wixsite.com/tiberrulem/post/cambridge-latin-course-1-tremores-answers-utorrent-zip-full-pdf-ebook
https://www.bankoffootball.com/read-blog/1819
https://www.drupal.org/files/issues/2021-11-28/Toyota-Nav-Dvd-Download.pdf
https://fdocuments.ec/document/junooniyat2016ostitunesripm4avbr320kbps.html
https://wakelet.com/wake/nB8GG-ynH3FnczqlLYVEE
http://preapcamuhot.blo.gg/2021/november/lg-infineon-usb-driver-1007.html
https://seesaawiki.jp/dalbiokaustep/d/Scholastic Vocabulary Packets Greek And Latin Roots Pdf
https://webporetarove.wixsite.com/amziplona/post/serial-tミウ-lミウ-chargement-ndproi15-200-010-rar-activation-32-download
https://www.cloudschool.org/activities/ahFzfmNsb3Vkc2Nob29sLWFwcHI5CxIEVXNlchiAgIC_vdubCwwLEgZDb3Vyc2UYgICA__mu-ggMCxIIQWN0aXZpdHkYgICAv8GYhQgMogEQNTcyODg4NTg4Mjc0ODkyOA
https://trello.com/c/CpVwdl0v/10-rus-adobe-after-effects-mac-os-crack-1210
https://cdn.thingiverse.com/assets/c1/20/fc/64/44/findnevy823.html
https://cdn.thingiverse.com/assets/9f/30/35/96/e7/Jennifer_Bax_Busty_Bustyyyjenny_Full_Versionrar.html
https://cdn.thingiverse.com/assets/83/a6/c4/0f/16/larvahav365.html
https://cdn.thingiverse.com/assets/37/93/bc/c1/b8/walrand751.html
https://cdn.thingiverse.com/assets/cb/3d/e2/89/86/URL_Action_Editor_2012mediafirerar_9028_hajib_detente.html
http://roecosheart.yolasite.com/resources/Los-Reales-Del-Valle-Discografia-Completa-firewall-dracula-lib.pdf
https://www.pixnet.net/pcard/81098601c6a2131754/article/52a65e70-4ed4-11ec-b686-27f8f2ffe017
https://faustinahersom7026.wixsite.com/tiacrataril/post/chandni-hindi-movie-hd-free-download
https://nutztersnalosttolr.wixsite.com/rechtworlsesi/post/key-1999-applied-practice-macbeth-answer-utorrent-32bit-professional-serial-full-version-rar
https://opamricons1977.wixsite.com/oznalabe/post/new-additional-mathematics-ho-soo-thong-1-mobi-rar-free-ebook
https://seesaawiki.jp/chasribudsupp/d/About Time Drama Vostfr
https://finantcolami.wixsite.com/cirpensbaswai/post/columbine-shooter-ifes-mobi-full-version-zip-utorrent
https://www.cloudschool.org/activities/ahFzfmNsb3Vkc2Nob29sLWFwcHI5CxIEVXNlchiAgMCA4pyRCwwLEgZDb3Vyc2UYgICAv_2X5gkMCxIIQWN0aXZpdHkYgIDAkPK5lgsMogEQNTcyODg4NTg4Mjc0ODkyOA
https://www.cloudschool.org/activities/ahFzfmNsb3Vkc2Nob29sLWFwcHI5CxIEVXNlchiAgICfxKeqCwwLEgZDb3Vyc2UYgIDAwPSluQkMCxIIQWN0aXZpdHkYgIDAkLGZuwoMogEQNTcyODg4NTg4Mjc0ODkyOA
https://www.cloudschool.org/activities/ahFzfmNsb3Vkc2Nob29sLWFwcHI5CxIEVXNlchiAgMCA4rXbCQwLEgZDb3Vyc2UYgICAv9-wvQkMCxIIQWN0aXZpdHkYgIDA4KDTtggMogEQNTcyODg4NTg4Mjc0ODkyOA
https://www.cloudschool.org/activities/ahFzfmNsb3Vkc2Nob29sLWFwcHI5CxIEVXNlchiAgMCgupjqCwwLEgZDb3Vyc2UYgIDAgJ2ZsAkMCxIIQWN0aXZpdHkYgIDAoPPFhggMogEQNTcyODg4NTg4Mjc0ODkyOA
https://coub.com/stories/2634658-verified-world-emojii-day-le-faccine-usate-da-8-italiani-su-10
https://coub.com/stories/2634657-top-dhtmlxsuite-pro-full-14
https://coub.com/stories/2634655-bsqlbf-v2-v-blind-sql-injection-brute-forcer-tool-lascdesh
https://coub.com/stories/2634654-new-solucionario-de-resistencia-de-materiales-miroliubov
https://wakelet.com/wake/C-1BcreQukp_CBa-timO_
https://wakelet.com/wake/ufjqOzimYZgd0sqWW9o7x
https://wakelet.com/wake/xbDOeASCrygHKb9BLJ3Pk
https://wakelet.com/wake/Y7nscivQXFbSKfxMsc3wt
https://wakelet.com/wake/aEDH9CXSR1PNpUNBqBno8
https://wakelet.com/wake/0pfc-cvePpSp1qdxquGJq
https://wakelet.com/wake/m5cxCK-4mnTKy5F6gIZML
https://wakelet.com/wake/5xV4OPj7w-XxNIcIo4UV8
https://wakelet.com/wake/9v4wx78X9746Bor-YULNU
https://wakelet.com/wake/6jgr7SIyiwG6t_84KqqP7
https://wakelet.com/wake/FvjBz364njIox-geVJ1Uh
https://wakelet.com/wake/SZnNVbIyqnByD4DtsU2k0
https://wakelet.com/wake/up_bymcVmk7Gyasd1Nfsz
https://wakelet.com/wake/4d3COwZmrKpkGo8VvR_IN
https://wakelet.com/wake/aJE0sCwlbSru5EZNnYzg9
https://wakelet.com/wake/P2cgNqgDZmXDpYtH4iGHa
https://wakelet.com/wake/Ra_Ga1hvEUOeyXkdtu9XP
https://wakelet.com/wake/coOJ8yL-AuXfuOVoQbzEP
https://wakelet.com/wake/-t_P9i7ivGiDv2fDmUOV8
https://wakelet.com/wake/IC8q6n2PUw4DqjvDBtf7R