日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

【python图像处理】彩色映射(续篇)

發布時間:2025/3/21 python 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【python图像处理】彩色映射(续篇) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Python中的彩色映射一文中,向大伙介紹了一下matplotlib模塊中內嵌的colormap,以及如何將這些colormap中的數值導出來以供使用。

在續篇中我們將進一步向大家介紹如何生成自定義colormap。如現在有(255,0,0), (255,255,0), (255,255,255), (0,157,0), (255,0,255)五種顏色,我們如何用這些顏色作為區間邊界生成一個自定義的colormap呢?

最簡單的情形,以五種顏色作為邊界,我們將整個灰度級平均分成4個等分,對于[0, 255]灰度區間而言,均分后的區間分別為[0, 64),[64, 128),[128, 191),[191, 255]。那么我們只需要在每個區間分別對R、G、B三個通道進行插值即可,如線性插值,具體實現如下。

def linear_colormap(colors, max):rows, cols = np.shape(colors)position = [] for i in range(0, rows): position.append(np.int(round((1.0 * i * max)/(rows - 1))))color_map = []#遍歷所有區間for i in range(0, rows - 1):#遍歷區間中的所有像素點for j in range(position[i], position[i + 1]):color_r = (colors[i+1][0] - colors[i][0]) * (j- position[i])/(position[i + 1] - position[i]) + colors[i][0]color_g = (colors[i+1][1] - colors[i][1]) * (j- position[i])/(position[i + 1] - position[i]) + colors[i][1]color_b = (colors[i+1][2] - colors[i][2]) * (j- position[i])/(position[i + 1] - position[i]) + colors[i][2]color = (color_r, color_g, color_b)color_map.append(color)#最后一個灰度級沒有遍歷到,需要進行特殊處理color_map.append(colors[rows - 1])return color_map

其中,參數max是灰度級的最大值,這里即為255。順便也貼一下繪制colormap的代碼:

def draw_colormap(color_map):map_image_arr = np.zeros((50, 256, 3), np.uint8)for i in range(0, 256, 1):map_image_arr[:, i, 0] = color_map[i][0]map_image_arr[:, i, 1] = color_map[i][1]map_image_arr[:, i, 2] = color_map[i][2] map_image = Image.fromarray(map_image_arr)map_image.show()map_image.save("colormap.png")return


這樣,我們就得到了自定義的colormap。



另外,我們也可以通過制定區間寬度,即上述position的值來生成colormap,如position = [0, 50, 100, 150, 255]。此時只需要對上述程序略作修改即可。


def linear_colormap(colors, max, position):rows, cols = np.shape(colors)color_map = []#遍歷所有區間for i in range(0, rows - 1):#遍歷區間中的所有像素點for j in range(position[i], position[i + 1]):color_r = (colors[i+1][0] - colors[i][0]) * (j- position[i])/(position[i + 1] - position[i]) + colors[i][0]color_g = (colors[i+1][1] - colors[i][1]) * (j- position[i])/(position[i + 1] - position[i]) + colors[i][1]color_b = (colors[i+1][2] - colors[i][2]) * (j- position[i])/(position[i + 1] - position[i]) + colors[i][2]color = (color_r, color_g, color_b)color_map.append(color)#最后一個灰度級沒有遍歷到,需要進行特殊處理color_map.append(colors[rows - 1])return color_map


這樣獲得的colormap如下圖所示。


更復雜一點,我們可以使用不同的插值算法,來進行自定義colormap,如使用二次、三次插值等,這里就不再作具體的介紹,感興趣的同學可以嘗試一下!


2017.03.09

總結

以上是生活随笔為你收集整理的【python图像处理】彩色映射(续篇)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。