最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

使用Python的PIL如何將數(shù)組輸出圖像

 更新時(shí)間:2024年02月27日 10:25:33   作者:Vic·Tory  
這篇文章主要介紹了使用Python的PIL如何將數(shù)組輸出圖像問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

PIL將數(shù)組輸出圖像

最近拿到一幅txt格式的城市地圖,其格式為2400×2400的二維數(shù)組,每個(gè)數(shù)組的值為一個(gè)整數(shù),從1到800,將城市劃分為800個(gè)不同的區(qū),一個(gè)區(qū)的整數(shù)值相同,直接查看txt文檔不太容易,因此考慮將該txt利用python轉(zhuǎn)化為圖像。

通常的彩色圖像可以看作是三維數(shù)組,長(zhǎng)×寬×通道,其中通道為每個(gè)像素點(diǎn)上用于表示顏色的數(shù)據(jù),例如RGB三通道就是利用三個(gè)0~255的值來(lái)描述紅、綠、藍(lán)三個(gè)顏色。

PIL.Image打開PNG、BMP和JPG彩色圖像格式會(huì)將其保存為RGB模式的三維數(shù)組。

但是現(xiàn)在的txt文件是二維數(shù)組,只有長(zhǎng)×寬,需要填充RGB顏色通道的值。

由于有800個(gè)不同的數(shù)字,因此我們將區(qū)域數(shù)值對(duì)255取模作為B通道的值,取整作為G通道的值,這樣已經(jīng)足以區(qū)別800個(gè)區(qū)域的值了,但是相鄰區(qū)域顏色太接近,因此將取模的值先乘以50再對(duì)255取模,這樣可以將相鄰區(qū)域的顏色值在R通道上拉開,便于觀察。

import numpy as np
from PIL import Image
 
map_data = np.loadtxt("./city_map.txt")
map_data = map_data.tolist()
 
# 填充地圖數(shù)組的顏色通道
for i in range(2400):
    for j in range(2400):
        value = int(map_data[i][j])
        if value == 0:  # 如果地圖值為0,顯示黑色
            map_data[i][j] = [0, 0, 0]
        else:           # 將流量低的區(qū)域根據(jù)區(qū)域號(hào)碼來(lái)填充RGB三通道
            r = (value % 255) * 50 % 255        # 取模乘以50再取模作為R通道
            g = (value // 255) * 50 + 100       # 取整加100作為G通道的值
            b = value % 255                     # 取模作為B通道的值
            map_data[i][j] = [r, g, b]
 
# 輸出png圖像
map_data = np.array(map_data)
map_data = np.asarray(map_data, np.uint8)
pic = Image.fromarray(map_data)
pic.save('city.png')

生成圖像如下:

如果需要根據(jù)每個(gè)地區(qū)的不同指標(biāo)數(shù)值來(lái)生成由淺至深的圖像,首先根據(jù)區(qū)域的索引從指標(biāo)數(shù)組flow_data[]讀出該地區(qū)的指標(biāo)flow_value,然后將flow_value與指標(biāo)最大值max_flow相除,再乘以255,這樣就將指標(biāo)的值映射到了R通道的0~255的值上,然后用255減去該值,將G、B通道都染為255,這樣是為了指標(biāo)數(shù)值小的地方顯示為白色。

    map_data = np.loadtxt("./city.txt")
    map_data = map_data.tolist()
    max_flow = flow_data.max()
    for i in range(2400):
        for j in range(2400):
            area = int(map_data[i][j])
            flow_value = flow_data[area - 1]   # 根據(jù)地圖區(qū)域索引讀取值
            if area == 0:  # 如果地圖值為0,顯示黑色
                map_data[i][j] = [0, 0, 0]
            else:  # 根據(jù)區(qū)域流量值來(lái)填充RGB三通道
                r = 255 - flow_value / max_flow * 255
                g = 255
                b = 255
                map_data[i][j] = [r, g, b]
    # 輸出png圖像
    map_data = np.array(map_data)
    map_data = np.asarray(map_data, np.uint8)
    pic = Image.fromarray(map_data)
    pic.save('./output/' + flow_type + '_flow_map.png')

使用PIL的Image對(duì)象生成圖像的模式有九種

除了RGB之外還有如下:

模式“1”為二值圖像,非黑即白。但是它每個(gè)像素用8個(gè)bit表示,0表示黑,255表示白。

模式“L”為灰色圖像,它的每個(gè)像素用8個(gè)bit表示,0表示黑,255表示白,其他數(shù)字表示不同的灰度

模式“I”為32位整型灰色圖像,它的每個(gè)像素用32個(gè)bit表示,0表示黑,255表示白,(0,255)之間的數(shù)字表示不同的灰度。

模式“F”為32位浮點(diǎn)灰色圖像,它的每個(gè)像素用32個(gè)bit表示,0表示黑,255表示白,(0,255)之間的數(shù)字表示不同的灰度。

模式“P”為8位彩色圖像,它的每個(gè)像素用8個(gè)bit表示,其對(duì)應(yīng)的彩色值是按照調(diào)色板查詢出來(lái)的。

模式“RGBA”為32位彩色圖像,它的每個(gè)像素用32個(gè)bit表示,其中24bit表示紅色、綠色和藍(lán)色三個(gè)通道,另外8bit表示alpha通道,即透明通道。

模式“CMYK”為32位彩色圖像,它的每個(gè)像素用32個(gè)bit表示。模式“CMYK”就是印刷四分色模式,它是彩色印刷時(shí)采用的一種套色模式,利用色料的三原色混色原理,加上黑色油墨,共計(jì)四種顏色混合疊加,形成所謂“全彩印刷”。四種標(biāo)準(zhǔn)顏色是:C:Cyan = 青色,又稱為‘天藍(lán)色’或是‘湛藍(lán)’M:Magenta = 品紅色,又稱為‘洋紅色’;Y:Yellow = 黃色;K:Key Plate(blacK) = 定位套版色(黑色)。

模式“YCbCr”為24位彩色圖像,它的每個(gè)像素用24個(gè)bit表示。YCbCr其中Y是指亮度分量,Cb指藍(lán)色色度分量,而Cr指紅色色度分量。人的肉眼對(duì)視頻的Y分量更敏感,因此在通過對(duì)色度分量進(jìn)行子采樣來(lái)減少色度分量后,肉眼將察覺不到的圖像質(zhì)量的變化。

例如通過image.convert("F")可以將圖片轉(zhuǎn)換為F模式

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Python實(shí)現(xiàn)從概率分布中隨機(jī)采樣

    Python實(shí)現(xiàn)從概率分布中隨機(jī)采樣

    這篇文章主要介紹了通過幾個(gè)機(jī)器學(xué)習(xí)中最常用的概率分布為例,來(lái)看看如何從一個(gè)概率分布中采樣,文章中的代碼對(duì)我們的工作或?qū)W習(xí)具有一定價(jià)值,感興趣的朋友可以了解一下
    2021-12-12
  • Python 硬幣兌換問題

    Python 硬幣兌換問題

    這篇文章主要介紹了Python 硬幣兌換問題,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-07-07
  • python+elasticsearch實(shí)現(xiàn)標(biāo)簽匹配計(jì)數(shù)操作

    python+elasticsearch實(shí)現(xiàn)標(biāo)簽匹配計(jì)數(shù)操作

    這篇文章主要介紹了python+elasticsearch實(shí)現(xiàn)標(biāo)簽匹配計(jì)數(shù)操作,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2024-04-04
  • 利用Hyperic調(diào)用Python實(shí)現(xiàn)進(jìn)程守護(hù)

    利用Hyperic調(diào)用Python實(shí)現(xiàn)進(jìn)程守護(hù)

    這篇文章主要為大家詳細(xì)介紹了利用Hyperic調(diào)用Python實(shí)現(xiàn)進(jìn)程守護(hù),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-01-01
  • 對(duì)pandas里的loc并列條件索引的實(shí)例講解

    對(duì)pandas里的loc并列條件索引的實(shí)例講解

    今天小編就為大家分享一篇對(duì)pandas里的loc并列條件索引的實(shí)例講解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來(lái)看看吧
    2018-11-11
  • Python實(shí)現(xiàn)8個(gè)概率分布公式的方法詳解

    Python實(shí)現(xiàn)8個(gè)概率分布公式的方法詳解

    在本文中,我們將介紹一些常見的分布(均勻分布、高斯分布、對(duì)數(shù)正態(tài)分布等)并通過Python代碼進(jìn)行可視化以直觀地顯示它們,感興趣的可以學(xué)習(xí)一下
    2022-05-05
  • Python+OpenCV實(shí)現(xiàn)在圖像上繪制矩形

    Python+OpenCV實(shí)現(xiàn)在圖像上繪制矩形

    這篇文章主要介紹了如何利用Python和OpenCV實(shí)現(xiàn)在圖像上繪制任意大小的矩形,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以參考一下
    2022-03-03
  • 一篇文章帶你詳細(xì)了解python中一些好用的庫(kù)

    一篇文章帶你詳細(xì)了解python中一些好用的庫(kù)

    這篇文章主要推薦了一些好用的Python庫(kù),都有這不錯(cuò)的群眾基礎(chǔ),非常好用,也都很實(shí)用,推薦給大家,希望能夠給你帶來(lái)幫助
    2021-09-09
  • 學(xué)會(huì)python操作excel永不加班系列

    學(xué)會(huì)python操作excel永不加班系列

    這篇文章主要介紹了python操作excel的詳解,,需要的朋友可以參考下,小編覺得這篇文章寫的還不錯(cuò),希望能夠給你帶來(lái)幫助
    2021-11-11
  • python清除PDF文件中水印的項(xiàng)目實(shí)踐

    python清除PDF文件中水印的項(xiàng)目實(shí)踐

    本文主要介紹了python清除PDF文件中水印的項(xiàng)目實(shí)踐,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2025-05-05

最新評(píng)論

仪征市| 工布江达县| 南郑县| 珲春市| 东辽县| 蒙山县| 武威市| 泰来县| 普兰店市| 华安县| 正安县| 雅江县| 皮山县| 南宫市| 成武县| 绥宁县| 镇赉县| 延川县| 托里县| 剑川县| 竹山县| 铜梁县| 漳浦县| 高台县| 商河县| 连云港市| 维西| 汉中市| 青阳县| 连州市| 大同市| 民勤县| 乳源| 天津市| 沂源县| 南雄市| 浮梁县| 土默特右旗| 溆浦县| 黑河市| 中阳县|