欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

使用Python實(shí)現(xiàn)圖像顏色量化的方法

 更新時(shí)間:2022年06月15日 09:28:08   作者:坐望云起  
這篇文章主要介紹了使用Python進(jìn)行圖像顏色量化,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下

一、選擇圖片

從選擇圖像開(kāi)始。 例如,我將使用下面的海水和椰子樹的照片。

二、創(chuàng)建腳本

1、導(dǎo)入相關(guān)庫(kù)

接下來(lái),讓我們導(dǎo)入 extcolors 和 rgb2hex 庫(kù)。 extcolors 庫(kù)返回 RGB 值,將使用 rgb2hex 庫(kù)將其轉(zhuǎn)換為 HEX 顏色代碼。

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import matplotlib.patches as patches
import matplotlib.image as mpimg
 
from PIL import Image
from matplotlib.offsetbox import OffsetImage, AnnotationBbox

如果在導(dǎo)入這兩個(gè)庫(kù)時(shí)出現(xiàn)一些錯(cuò)誤,您可以嘗試安裝一些必備庫(kù)以使其工作。 這些庫(kù)在下面的代碼中。 刪除 !pip 前面的 # 符號(hào)并運(yùn)行以安裝它們。 請(qǐng)不要?jiǎng)h除版本號(hào)前的#符號(hào)。 它們只是筆記。

#!pip install easydev                 #version 0.12.0
#!pip install colormap                #version 1.0.4
#!pip install opencv-python           #version 4.5.5.64
#!pip install colorgram.py            #version 1.2.0
#!pip install extcolors               #version 1.0.0
import cv2
import extcolors
from colormap import rgb2hex

2、創(chuàng)建方法

接下來(lái),我將逐步解釋如何創(chuàng)建用于顏色提取的函數(shù)。 如果你想直接得到函數(shù),請(qǐng)給定義一個(gè)函數(shù)打分。

調(diào)整圖像大小

從準(zhǔn)備輸入圖像開(kāi)始。 用現(xiàn)代相機(jī)和手機(jī)拍攝的照片太大了。 有些人可以拍攝超過(guò) 50 兆像素的照片(4K 顯示器只能顯示大約 8.3 兆像素)。 如果我們直接使用一個(gè)巨大的圖像,處理可能需要一些時(shí)間。

因此,首先要做的是調(diào)整大小。 下面的代碼顯示了如何將圖片的大小調(diào)整為 900 像素的寬度。 如果圖像不是很大或者你的 CPU 速度很快,這一步可以省略,或者可以增加輸出分辨率數(shù)。 請(qǐng)注意,調(diào)整照片大小后,新照片將保存在您的計(jì)算機(jī)上以供下一步閱讀。

input_name = '<photo location/name>'
output_width = 900                   #set the output size
img = Image.open(input_name)
wpercent = (output_width/float(img.size[0]))
hsize = int((float(img.size[1])*float(wpercent)))
img = img.resize((output_width,hsize), Image.ANTIALIAS)
 
#save
resize_name = 'resize_' + input_name  #the resized image name
img.save(resize_name)                 #output location can be specified before resize_name
 
#read
plt.figure(figsize=(9, 9))
img_url = resize_name
img = plt.imread(img_url)
plt.imshow(img)
plt.axis('off')
plt.show()

顏色提取

使用 extcolors 庫(kù)提取顏色。 我們必須設(shè)置的參數(shù):

容差:對(duì)顏色進(jìn)行分組以限制輸出并提供更好的視覺(jué)表示。 基于從 0 到 100 的比例。其中 0 不會(huì)對(duì)任何顏色進(jìn)行分組,而 100 會(huì)將所有顏色歸為一個(gè)。

限制:輸出中呈現(xiàn)的提取顏色數(shù)量的上限。

在下面的代碼中,我將公差值設(shè)置為 12,并將顏色代碼輸出的數(shù)量限制為 11 種顏色(limit=12)。 可以根據(jù)需要更改數(shù)字。 獲得的結(jié)果將是 RGB 顏色代碼及其出現(xiàn)。

colors_x = extcolors.extract_from_path(img_url, tolerance = 12, limit = 12)
colors_x

使用 rgb2hex 庫(kù)定義一個(gè)函數(shù)以將 RGB 代碼轉(zhuǎn)換為 HEX 顏色代碼并創(chuàng)建一個(gè) DataFrame。

def color_to_df(input):
    colors_pre_list = str(input).replace('([(','').split(', (')[0:-1]
    df_rgb = [i.split('), ')[0] + ')' for i in colors_pre_list]
    df_percent = [i.split('), ')[1].replace(')','') for i in colors_pre_list]
    
    #convert RGB to HEX code
    df_color_up = [rgb2hex(int(i.split(", ")[0].replace("(","")),
                          int(i.split(", ")[1]),
                          int(i.split(", ")[2].replace(")",""))) for i in df_rgb]
    
    df = pd.DataFrame(zip(df_color_up, df_percent), columns = ['c_code','occurence'])
    return df
 
df_color = color_to_df(colors_x)
df_color

繪制圖標(biāo)

list_color = list(df_color['c_code'])
list_precent = [int(i) for i in list(df_color['occurence'])]
text_c = [c + ' ' + str(round(p*100/sum(list_precent),1)) +'%' for c, p in zip(list_color,
                                                                               list_precent)]
fig, ax = plt.subplots(figsize=(90,90),dpi=10)
wedges, text = ax.pie(list_precent,
                      labels= text_c,
                      labeldistance= 1.05,
                      colors = list_color,
                      textprops={'fontsize': 120, 'color':'black'}
                     )
plt.setp(wedges, width=0.3)
 
#create space in the center
plt.setp(wedges, width=0.36)
 
ax.set_aspect("equal")
fig.set_facecolor('white')
plt.show()

#create background color
fig, ax = plt.subplots(figsize=(192,108),dpi=10)
fig.set_facecolor('white')
plt.savefig('bg.png')
plt.close(fig)
 
#create color palette
bg = plt.imread('bg.png')
fig = plt.figure(figsize=(90, 90), dpi = 10)
ax = fig.add_subplot(1,1,1)
 
x_posi, y_posi, y_posi2 = 320, 25, 25
for c in list_color:
    if  list_color.index(c) <= 5:
        y_posi += 125
        rect = patches.Rectangle((x_posi, y_posi), 290, 115, facecolor = c)
        ax.add_patch(rect)
        ax.text(x = x_posi+360, y = y_posi+80, s = c, fontdict={'fontsize': 150})
    else:
        y_posi2 += 125
        rect = patches.Rectangle((x_posi + 800, y_posi2), 290, 115, facecolor = c)
        ax.add_artist(rect)
        ax.text(x = x_posi+1160, y = y_posi2+80, s = c, fontdict={'fontsize': 150})
        
ax.axis('off')
plt.imshow(bg)
plt.tight_layout()

三、完整代碼

我為了省事,resize路徑被寫在程序了,請(qǐng)注意根據(jù)自己的情況修改。

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import matplotlib.patches as patches
import matplotlib.image as mpimg
 
from PIL import Image
from matplotlib.offsetbox import OffsetImage, AnnotationBbox
 
import cv2
import extcolors
 
from colormap import rgb2hex
 
def color_to_df(input):
    colors_pre_list = str(input).replace('([(', '').split(', (')[0:-1]
    df_rgb = [i.split('), ')[0] + ')' for i in colors_pre_list]
    df_percent = [i.split('), ')[1].replace(')', '') for i in colors_pre_list]
 
    # convert RGB to HEX code
    df_color_up = [rgb2hex(int(i.split(", ")[0].replace("(", "")),
                           int(i.split(", ")[1]),
                           int(i.split(", ")[2].replace(")", ""))) for i in df_rgb]
 
    df = pd.DataFrame(zip(df_color_up, df_percent), columns=['c_code', 'occurence'])
    return df
 
 
def exact_color(input_image, resize, tolerance, zoom):
    # background
    bg = 'bg.png'
    fig, ax = plt.subplots(figsize=(192, 108), dpi=10)
    fig.set_facecolor('white')
    plt.savefig(bg)
    plt.close(fig)
 
    # resize
    output_width = resize
    img = Image.open(input_image)
    if img.size[0] >= resize:
        wpercent = (output_width / float(img.size[0]))
        hsize = int((float(img.size[1]) * float(wpercent)))
        img = img.resize((output_width, hsize), Image.ANTIALIAS)
        resize_name = 'C:/Users/zyh/Desktop/resize_456.jpg'
        img.save(resize_name)
    else:
        resize_name = input_image
 
    # crate dataframe
    img_url = resize_name
    colors_x = extcolors.extract_from_path(img_url, tolerance=tolerance, limit=13)
    df_color = color_to_df(colors_x)
 
    # annotate text
    list_color = list(df_color['c_code'])
    list_precent = [int(i) for i in list(df_color['occurence'])]
    text_c = [c + ' ' + str(round(p * 100 / sum(list_precent), 1)) + '%' for c, p in zip(list_color, list_precent)]
    fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(160, 120), dpi=10)
 
    # donut plot
    wedges, text = ax1.pie(list_precent,
                           labels=text_c,
                           labeldistance=1.05,
                           colors=list_color,
                           textprops={'fontsize': 150, 'color': 'black'})
    plt.setp(wedges, width=0.3)
 
    # add image in the center of donut plot
    img = mpimg.imread(resize_name)
    imagebox = OffsetImage(img, zoom=zoom)
    ab = AnnotationBbox(imagebox, (0, 0))
    ax1.add_artist(ab)
 
    # color palette
    x_posi, y_posi, y_posi2 = 160, -170, -170
    for c in list_color:
        if list_color.index(c) <= 5:
            y_posi += 180
            rect = patches.Rectangle((x_posi, y_posi), 360, 160, facecolor=c)
            ax2.add_patch(rect)
            ax2.text(x=x_posi + 400, y=y_posi + 100, s=c, fontdict={'fontsize': 190})
        else:
            y_posi2 += 180
            rect = patches.Rectangle((x_posi + 1000, y_posi2), 360, 160, facecolor=c)
            ax2.add_artist(rect)
            ax2.text(x=x_posi + 1400, y=y_posi2 + 100, s=c, fontdict={'fontsize': 190})
 
    fig.set_facecolor('white')
    ax2.axis('off')
    bg = plt.imread('bg.png')
    plt.imshow(bg)
    plt.tight_layout()
    return plt.show()
exact_color('C:/Users/zyh/Desktop/456.jpg', 900, 12, 2.5)

運(yùn)行結(jié)果如下

到此這篇關(guān)于使用Python進(jìn)行圖像顏色量化的文章就介紹到這了,更多相關(guān)Python圖像顏色量化內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python基礎(chǔ)之循環(huán)語(yǔ)句用法示例【for、while循環(huán)】

    Python基礎(chǔ)之循環(huán)語(yǔ)句用法示例【for、while循環(huán)】

    這篇文章主要介紹了Python基礎(chǔ)之循環(huán)語(yǔ)句用法,結(jié)合實(shí)例形式分析了Python使用for、while循環(huán)及range、break和continue語(yǔ)句相關(guān)使用技巧,需要的朋友可以參考下
    2019-03-03
  • python簡(jiǎn)介及下載安裝

    python簡(jiǎn)介及下載安裝

    這篇文章介紹了python以及下載安裝的方法,對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-06-06
  • Python?Pandas:DataFrame一列切分成多列、分隔符切分選字段方式

    Python?Pandas:DataFrame一列切分成多列、分隔符切分選字段方式

    這篇文章主要介紹了Python?Pandas:DataFrame一列切分成多列、分隔符切分選字段方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-09-09
  • Python實(shí)現(xiàn)刪除重復(fù)文件的示例代碼

    Python實(shí)現(xiàn)刪除重復(fù)文件的示例代碼

    這篇文章主要為大家詳細(xì)介紹了如何利用Python實(shí)現(xiàn)刪除重復(fù)文件功能,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)Python有一定的幫助,感興趣的小伙伴的可以了解一下
    2023-02-02
  • Python中flask框架跨域問(wèn)題的解決方法

    Python中flask框架跨域問(wèn)題的解決方法

    本文主要介紹了Python中flask框架跨域問(wèn)題的解決方法,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-08-08
  • Python基于HOG+SVM/RF/DT等模型實(shí)現(xiàn)目標(biāo)人行檢測(cè)功能

    Python基于HOG+SVM/RF/DT等模型實(shí)現(xiàn)目標(biāo)人行檢測(cè)功能

    這篇文章主要介紹了Python基于HOG+SVM/RF/DT等模型實(shí)現(xiàn)目標(biāo)檢測(cè)[行人檢測(cè)],今天這里并不是說(shuō)要做出怎樣的效果,而是基于HOG+SVM來(lái)實(shí)踐機(jī)器學(xué)習(xí)檢測(cè)的流程,需要的朋友可以參考下
    2022-06-06
  • 詳解如何修改jupyter notebook的默認(rèn)目錄和默認(rèn)瀏覽器

    詳解如何修改jupyter notebook的默認(rèn)目錄和默認(rèn)瀏覽器

    這篇文章主要介紹了詳解如何修改jupyter notebook的默認(rèn)目錄和默認(rèn)瀏覽器,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-01-01
  • python實(shí)現(xiàn)RSA加密(解密)算法

    python實(shí)現(xiàn)RSA加密(解密)算法

    RSA是目前最有影響力的公鑰加密算法,它能夠抵抗到目前為止已知的絕大多數(shù)密碼攻擊,已被ISO推薦為公鑰數(shù)據(jù)加密標(biāo)準(zhǔn),下面通過(guò)本文給大家介紹python實(shí)現(xiàn)RSA加密(解密)算法,需要的朋友參考下
    2016-02-02
  • python 消除 futureWarning問(wèn)題的解決

    python 消除 futureWarning問(wèn)題的解決

    今天小編就為大家分享一篇python 消除 futureWarning問(wèn)題的解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-12-12
  • 一文教你學(xué)會(huì)使用Python中的多處理模塊

    一文教你學(xué)會(huì)使用Python中的多處理模塊

    Python?多處理模塊是一個(gè)強(qiáng)大的工具,用于實(shí)現(xiàn)并行處理,提高程序的性能和效率,本文將詳細(xì)介紹?Python?中多處理模塊的使用方法,希望對(duì)大家有所幫助
    2024-01-01

最新評(píng)論