日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

利用python在excel中畫圖的實現方法

瀏覽:22日期:2022-08-02 09:41:59

一、前言

以前大學時候,學EXCEL看到N多大神利用excel畫圖,覺得很不可思議。今個學了一個來月python,膨脹了就想用excel畫圖。當然,其實用畫圖這個詞不甚嚴謹,實際上是利用opencv遍歷每一個像素的rgb值,再將其轉化為16進制,最后調用openpyxl進行填充即可。

1.1、實現效果

效果如下圖

利用python在excel中畫圖的實現方法

1.2、需要用到的庫的安裝

需要用到庫如下:

import cv2 #導入OpenCV庫import xlsxwriter #利用這個調整行高列寬import openpyxl #利用這個填充顏色import numpy as np #下面這兩個是數據存儲的兩種方式,用此種方式處理數據,比列表高效,具體可自行查看文檔import pandas as pd

除了第一個庫其他的可以直接用pip在命令提示行進行安裝,或者利用編輯器的一些自動安裝功能也非常的方便,具體的請參看這篇文章 的第三節: 三、開始安裝

第一個庫如果你直接用pip3 install opencv-python 進行安裝的話,無論你網速多么快,都會非常慢幾k/s,如下:

利用python在excel中畫圖的實現方法

如果能安裝好還行,關鍵有的可能等上幾分鐘也不行,直接出現幾十行的紅色字看的頭疼。幾經百度后才知道是安裝源的問題,切換為國內的安裝源即可,利用如下命令,

pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple opencv-python

如下圖,我準備截取安裝速度和上面的作對比的,結果直接安裝好了

利用python在excel中畫圖的實現方法

二、代碼分開講解

本文我們利用面相對象的編程思維進行。

2.1、對象的定義以及初始化

class ImageToExcel(): def __init__(self,image_path,excel_path): self.imgviewx=cv2.imread(image_path,cv2.IMREAD_COLOR) self.excel_path=excel_path

前面兩行很好理解就是定義對象的格式以及初始化對象

其中image_path和excel_path這兩個變量是你的圖像儲存路徑和后續的excel文件保存位置。

第三行self.imgviewx=cv2.imread(image_path,cv2.IMREAD_COLOR)意思是調用opencv的imread讀取圖片。其中第一個參數就是對象實例化時候傳遞進來的圖像儲存路徑。該函數返回的是一個三維數組,分別表示x,y,rgb 就是x,y坐標對應的rgb值,其中x,y單位為1像素。最后將這個三維數組傳遞給對象的一個屬性imgviewx,等待后續對象方法調用。我們將之打印出來如下。

利用python在excel中畫圖的實現方法

第四行<<self.excel_path=excel_path>>是將對象實例化時候傳遞進來的excel_path傳遞給對象的屬性excel_path,同樣等待后續對象的方法調用。

2.2、對象的方法

1:行高列寬調整,以防止圖像變形

#excel行高列寬調整 def excel_size(self): workbook = xlsxwriter.Workbook(self.excel_path) worksheet = workbook.add_worksheet(’test’) worksheet.set_column(’A:CAA’, 1) for x in range(2000):worksheet.set_row(x, 8.4) workbook.close()

這個其實你可以后續在excel中調整也可以。第二行第三行基本一看就懂,就是在你剛開始對象實例化時候傳入的一個路徑中創建一個工作簿并添加一個名為test的工作表。第三行意思是將A列到CAA列的列寬設置為1(注意:這里面設置為1不知道為什么在工作表中就是0.94,列寬同樣小點)第四行意思同樣,不過行高不能批量只能通過循環。最后一樣看著像關閉,其實最主要功能是保存,沒有這一行,前面的所有設置都不會被保存。

2.3、對象的方法2:10進制轉化為16進制

#10進制轉化為16進制 def ten2_16(self,num): num1 = hex(num).replace(’0x’, ’’) return num1 if len(num1) > 1 else ’0’ + num1

這個方法不用細說,就是利用系統自帶的函數hex將10進制轉化為16進制。我們都知道hex返回的16進制是以0x開頭的,而16進制顏色碼中明顯沒有,所以要用replace去掉。如果rgb值是16以內的,以16進制顯示的話會是1位數,而同樣這個在16進制顏色碼中也沒有,所以最后一行的意思就是一位數的話在開頭補0。

2.4、對象的方法3:獲取r、g、b值并運用方法1轉化為16進制顏色碼

#獲取像素數據并轉化為16進制 def get_rgb_data(self): self.excel_size() data_r=pd.DataFrame( np.array(self.imgviewx)[:,:,2] ).applymap(self.ten2_16) data_g=pd.DataFrame( np.array(self.imgviewx)[:,:,1] ).applymap(self.ten2_16) data_b=pd.DataFrame( np.array(self.imgviewx)[:,:,0] ).applymap(self.ten2_16) return (data_r+data_g+data_b).values

其中第二行<<self.excel_size() >>是在本方法本調用時候先調用方法1調整行高列寬。我們后面說,這關系到對象方法之間的參數傳遞,我們后續說。三四五行的代碼結構一樣,我們挑一個說。比如第三行data_r=pd.DataFrame( np.array(self.imgviewx)[:,:,2] ).applymap(self.ten2_16)這個代碼我們可以拆開成下面的代碼

r=np.array(self.imgviewx)[:,:,2]tmp=pd.DataFrame( r )data_r=tmp.applymap(self.ten2_16)

這下就容易懂了第一行意思是將剛開始對象初始化時候得到的包含目標圖片的所有像素點的rgb值的三維列表轉化為數組并提取其中的r。第二行是將第一行得到的數組轉化為DataFrame對象并存儲在tmp變量中,以便第三行的處理。第三行是利用DataFrame中的applymap將r值轉化為16進制。

最后一行<<return (data_r+data_g+data_b).values>>意思是將轉化為16進制的rgb值合并后就得到了16進制的顏色碼并轉化為數組。

2.5、對象的方法4;顏色填充

def color_fill(self): rgb_list=self.get_rgb_data() wb = openpyxl.load_workbook(self.excel_path) ws = wb[’test’] for x,tmp1 in list(enumerate(rgb_list)): print(’總共有%s行,已填充%s行,還剩下%s行’%(len(rgb_list),x+1,len(rgb_list)-x-1)) for y ,tmp2 in list(enumerate(tmp1)): ws.cell(x+1,y+1).fill = openpyxl.styles.fills.GradientFill(stop=[str(tmp2),str(tmp2)]) wb.save(self.excel_path)

第二行<<rgb_list=self.get_rgb_data()>>是不是似曾相識,對,就是在方法2中調用方法1時候用的。這里就是在本方法也就是方法3中調用方法2。唯一的區別就是有沒有返回值。我們這樣在方法3中調用方法2然后方法2中調用方法1。這樣在對象外的時候我們就只用對象實例化并調用方法3即可實現功能。第三行、第四行就是調用openpyxl.load_workbook打開我們在方法1中新建的工作簿中的test工作表五到七行兩個循環嵌套很容易懂就是利用循環遍歷每個工作表第八行的代碼可能可以簡化 ,這個是我修改網上的一個填充漸變色的代碼。最后一行就是工作表的保存,沒什么可說的。

三、完整代碼

import cv2 #導入OpenCV庫import xlsxwriter #利用這個調整行高列寬import openpyxl #利用這個填充顏色import numpy as np #下面這兩個是數據存儲的兩種方式,用此種方式處理數據,比列表高效import pandas as pdclass ImageToExcel(): #初始化 def __init__(self,image_path,excel_path): self.imgviewx=cv2.imread(image_path,cv2.IMREAD_COLOR) self.excel_path=excel_path # excel行高列寬調整 def excel_size(self): workbook = xlsxwriter.Workbook(self.excel_path) worksheet = workbook.add_worksheet(’test’) worksheet.set_column(’A:CAA’, 1) for x in range(2000): worksheet.set_row(x, 8.4) workbook.close() #rgb轉16進制顏色碼 def ten2_16(self,num): tmp = hex(num).replace(’0x’, ’’) return tmp if len(tmp) > 1 else ’0’ + tmp #獲取像素數據并轉化為16進制 def get_rgb_data(self): self.excel_size() data_r=pd.DataFrame( np.array(self.imgviewx)[:,:,2] ).applymap(self.ten2_16) data_g=pd.DataFrame( np.array(self.imgviewx)[:,:,1] ).applymap(self.ten2_16) data_b=pd.DataFrame( np.array(self.imgviewx)[:,:,0] ).applymap(self.ten2_16) return (data_r+data_g+data_b).values #顏色填充 def color_fill(self): rgb_list=self.get_rgb_data() wb = openpyxl.load_workbook(self.excel_path) ws = wb[’test’] for x,tmp1 in list(enumerate(rgb_list)): print(’總共有%s行,已填充%s行,還剩下%s行’%(len(rgb_list),x+1,len(rgb_list)-x-1)) for y ,tmp2 in list(enumerate(tmp1)): ws.cell(x+1,y+1).fill = openpyxl.styles.fills.GradientFill(stop=[str(tmp2),str(tmp2)]) wb.save(self.excel_path)excel_path=’test23.xlsx’image_path=’tttt.png’image=ImageToExcel(image_path,excel_path)image.color_fill()

最后四行前兩行可以直接寫在第三行中,就是對象的實例化中另外還有一點,image_path中的 tttt.jpg是直接和我的py文件放在一起的,不然運行會報錯。

四、結語

好啦,到此所有東西已全部搞定,當然還有很多要注意的,第一、方法3中紅綠藍的提取中這部分的編號是剛好相反的,提取時候需要注意如下

利用python在excel中畫圖的實現方法

當然你也可以嘗試改變這個值看最后會得到什么結果。藍色的太陽 紅色的天空 或者是綠色的帽子,哈哈 好吧這個就你們自己發揮了。第二、除了以上一點需要注意的,還有一個需要注意,就是像素不能太高。我測試了下342*218的話我的i7-6700u打開excel就不是很流暢了。你可以遍歷的時候以2個像素點或者四個像素點為步長,不過這樣我沒試過,可能顆粒感比較明顯吧(自己猜測沒試過),或者把原始圖片修改下。

到此這篇關于利用python在excel中畫圖的實現方法的文章就介紹到這了,更多相關python excel畫圖內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: python
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
亚洲黑丝一区二区| 亚洲欧美一区在线| 在线精品福利| 欧美1级日本1级| 国产精选在线| 久久国产精品久久w女人spa| 久久九九精品| 久久久精品久久久久久96 | 男女激情视频一区| 国产在线|日韩| 国产精品日本一区二区不卡视频 | 麻豆91精品| аⅴ资源天堂资源库在线| 久久国产乱子精品免费女| 日本中文字幕视频一区| 日韩av一区二区三区| 亚洲欧美久久久| 欧美精品一区二区三区精品| 国产精品毛片aⅴ一区二区三区| 国产欧美自拍| 欧美视频二区| 成人国产精品一区二区免费麻豆| 国语精品一区| 亚洲女人av| 快she精品国产999| 天堂俺去俺来也www久久婷婷| 日本亚洲欧洲无免费码在线| 中文字幕中文字幕精品| jiujiure精品视频播放| 好吊一区二区三区| 日韩视频在线一区二区三区| 视频一区视频二区中文| 在线观看亚洲精品福利片| 欧美偷窥清纯综合图区| 精品一区二区三区中文字幕| 国产99精品| 日韩免费精品| 久久精品高清| 久久成人高清| 亚洲一级淫片| 日韩中文欧美| 日韩在线播放一区二区| 亚洲激情黄色| 91成人精品视频| 亚洲三级在线| 国产精品白浆| 亚洲婷婷在线| 欧美成人基地 | 国产成人精品一区二区三区在线| 日韩久久一区二区三区| 国产高清精品二区| 日日摸夜夜添夜夜添国产精品| 精品99在线| 蜜桃国内精品久久久久软件9| 日韩在线观看一区二区| 欧美国产精品| 模特精品在线| 成人污污视频| 中文字幕亚洲影视| 日韩一区亚洲二区| 日韩中文字幕| 国产亚洲一区二区手机在线观看| 亚久久调教视频| 一区二区视频欧美| 国产一区日韩| 91精品国产自产在线丝袜啪| 爽爽淫人综合网网站| 日本精品在线中文字幕| 手机在线电影一区| 亚洲综合色婷婷在线观看| av在线日韩| 精品久久97| 国产福利资源一区| 国产欧美亚洲一区| 欧美在线观看天堂一区二区三区| 亚洲精品成人| 欧美专区18| 蜜乳av另类精品一区二区| 欧美综合国产| 国产精品嫩草99av在线| 国产在线不卡| 黄色成人91| 日韩视频一区二区三区在线播放免费观看 | 国产精品18| 中文字幕日本一区二区| 在线亚洲自拍| 日产午夜精品一线二线三线| 美女久久久久久 | 视频一区日韩| 午夜精品成人av| 日韩欧美久久| 亚洲精一区二区三区| 蜜桃91丨九色丨蝌蚪91桃色| 欧美久久一区二区三区| 精品亚洲成人| 久久精品动漫| 亚洲精品第一| 国产网站在线| 四虎成人精品一区二区免费网站| 国产亚洲欧美日韩精品一区二区三区| 久久一区亚洲| 伊人国产精品| 精品免费av在线| 欧美日韩一区二区三区不卡视频 | 欧美激情 亚洲a∨综合| 亚洲午夜91| 欧美精品97| 丝袜脚交一区二区| 欧美国产美女| 久久精品xxxxx| 亚洲在线成人| 午夜精品成人av| 久久伊人亚洲| 欧美日韩一区二区三区不卡视频| 欧美+亚洲+精品+三区| 国产精品成久久久久| 国产精品日本一区二区三区在线| 国产日韩一区二区三区在线 | 精品三级久久| 欧美激情日韩| 日本精品国产| 国产精品中文| 国产在线不卡一区二区三区| 欧美肉体xxxx裸体137大胆| 国产亚洲在线观看| 久久精品97| 国产精品毛片久久久| 91av一区| 国产精品一区免费在线| 91嫩草精品| 亚洲欧美日本国产| 亚洲精品日韩久久| 日韩欧美激情| 欧美激情福利| 国产精品毛片久久| 欧美一区二区三区高清视频| 天堂网在线观看国产精品| 国产一区导航| 日韩av影院| 吉吉日韩欧美| 欧美一级专区| 国产激情一区| 99视频精品全国免费| 免费久久99精品国产| 日韩精品电影| 亚洲一区日韩在线| 亚洲青青久久| 婷婷精品视频| 国产精品一线天粉嫩av| 日本va欧美va精品发布| 超级白嫩亚洲国产第一| 国产视频一区二| 国产精品日本| 青青草国产精品亚洲专区无| 日韩久久一区二区三区| 久久国产直播| 日本成人一区二区| 国产精品色在线网站| 国产精品tv| 久久国产精品免费精品3p| 99久久精品费精品国产| 久久久一本精品| 日本免费一区二区视频| 国产三级一区| 亚洲电影在线一区二区三区| 亚洲18在线| 午夜精品久久久久久久久久蜜桃| 视频一区欧美精品| 亚洲成人精品| 久久av国产紧身裤| 久久香蕉精品| 99精品美女| 国产在线日韩精品| 欧美精品中文| 日韩精品亚洲一区二区三区免费| 四虎4545www国产精品 | 久久一区精品| 91嫩草精品| 亚洲一区二区三区中文字幕在线观看| 日韩av自拍| 国产激情久久| 国产精品任我爽爆在线播放| 亚洲精品系列| 一区二区高清| 亚洲精品在线二区| 亚洲精品日本| 日韩动漫一区| 在线成人直播| 久久xxxx| 国产农村妇女精品一二区| 国产精品黑丝在线播放| 六月婷婷综合| 久久亚洲人体| 久久99精品久久久野外观看| 青青草国产成人99久久| 日韩一区二区三区免费视频| 亚洲精品字幕| 国产精品久久久免费| 首页国产精品| 欧美~级网站不卡|