ExcelでPythonの図面を使用して実装

I.はじめに

大学の前に、神使用EXCELエクセル図面を参照してくださいどのくらいのN学ぶために、私は非常に奇妙な感じ。今日では、月のpythonのための学校は、Excelの描画を使用していた拡大しました。もちろん、実際には、あまり厳密描画ワードを使用し、実際には、各画素のRGB値を介してのOpenCVの使用であり、次に進数に変換し、最後のコールopenpyxlを充填することができます。

1.1、結果を達成

示す結果 ファイル

1.2、ライブラリを使用するには、インストールの必要性

私たちは、次のようにライブラリを使用する必要があります。

import cv2 #导入OpenCV库
import xlsxwriter #利用这个调整行高列宽
import openpyxl #利用这个填充颜色
import numpy as np #下面这两个是数据存储的两种方式,用此种方式处理数据,比列表高效,具体可自行查看文档
import pandas as pd

他のコマンドプロンプトPIPに直接インストール、または自動インストール機能の数のエディタを使用することができる最初のライブラリーに加えて、特定のは、この記事のセクションIIIを参照して、非常に便利でもあります。

その後、あなたはPIP3 OpenCVの-のpythonをインストールして直接インストールした場合、最初のライブラリ、次のようにあなたの速度は、非常に少数のK / Sが遅くなりますどのくらいの速どんなに:

ファイル

大丈夫インストールした場合は、数分待ってから、いくつかのキーかもしれ頭痛の数十を見るために仕事、単語赤い線が直接発生しません。それは、インストールの問題の原因があるの後に数回Baiduの、国内の情報源へのスイッチをインストールするには、次のコマンドを使用します。-i PIP3インストールhttps://pypi.tuna.tsinghua.edu.cn/simple OpenCVの-のPythonを

以下は、私はスピードをインストールする準備ができていますし、上記の比較のために取られ、結果は直接インストール

ファイル

第二に、コードは別途説明します

本論文では、オブジェクト指向プログラミングを使用して考えていました。

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

最初の2行はウェルフォーマットを理解し、オブジェクト定義オブジェクトを初期化します。

IMAGE_PATHとexcel_pathは、これら2つの変数これはあなたの画像や保存先以降のストレージ・パスExcelファイルです。

関数imreadのOpenCVのコール画像を読み取ることを第三のラインself.imgviewx = cv2.imread(IMAGE_PATH、cv2.IMREAD_COLOR)を意味します。前記オブジェクトが画像保存パスに渡されたときに、最初のパラメータがインスタンス化されます。この関数が返す3次元配列は、それぞれx、yは、RGBのRGB値を、対応するx、y座標である一つの画素のX、Y単位。最後に、オブジェクトimgviewxのプロパティに3次元配列、その後のオブジェクトメソッドの呼び出しを待ちます。次のように我々はそれをプリントアウトします。

ファイル

第4行の属性<< 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()

実際には、この調整はまた、中に秀でることができます従うことができます。

二行目と3行目基本的なものを理解するためには、でブックを作成し、テストという名前のワークシートを追加するために、パスを通過したときにオブジェクトをインスタンス化から始まるということです。

カラム1の列幅の列は、CAAが設けられていることを第三のライン手段(注:ワークシートが0.94である理由がわからない一組、同じドット列幅があります)

4行目は唯一のサイクルを通して同じではなく、大量の行を意味します。

最後のように近いように見えたが、実際には、最も重要な機能は、すべての設定の前に保存されません、このラインなしで保存されます。

2.3 16進数のバイナリ2時10へのオブジェクトのメソッド

#10进制转化为16进制
def ten2_16(self,num):
num1 = hex(num).replace('0x', '')
return num1 if len(num1) > 1 else '0' + num1

この方法は、精巧でないシステムの使用の機能が進10進16進に入ってくるです。進の始まりは0X Hexが返され、彼らは削除を交換する必要があるので、進カラーコードは、明確ではないことを私たちは皆知っています。

RGB値である場合は16未満16ワードは、16進数字で表示され、これは、同じヘックスカラーコードではなかった最後の行なので、その手段その0の先頭に単語の数。

2.4、物体3の方法:方法1を使用して値B取得するR、G、および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

前記第2の行self.excel_size()この呼び出し本発明の方法の第一の方法の列幅を調整する行の高さに呼び出されます。私たちが言うの後ろに、それはオブジェクト間のメソッドのパラメータの受け渡しに関連し、我々は以下の通り述べています。

同じコード構造三百四十から五行は、我々は発言権を選択します。例えば、3番目の列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)

今回は理解しやすいです。画像はRの配列に取得し、それらを抽出するために始めたとき、最初の行手段が対象物に含まれるすべての画素の三次元リストのRGB値が初期化されていること。

第二行は、得られた3行目を処理するために、オブジェクト変数tmpに格納されたデータフレームに配列の最初の行です。

第三行は、r値がapplymapの進データフレーム用に変換したです。

最後に改行(data_r + data_g + DATA_B).values手段カラーコード16進数16を与え、アレイに変換するために組み合わさ進RGB値に変換した後。

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)

第2の行rgb_list = self.get_rgb_data()は右、使用方法1、方法2と呼ばれ、慣れていません。

本発明の方法では、これは3方法2と呼ばれる方法です。唯一の違いは、戻り値がないということです。

我々は、この方法と方法3 2 1コールでメソッドを呼び出します。だから、外にオブジェクトをするとき、我々は唯一のオブジェクトのインスタンスを使用して機能を実現するための方法3を呼び出すこと。

三行目、4行目は、ワークブックのテストワークシートで私たちの新しい方法を開くopenpyxl.load_workbook呼び出すことです。

理解しやすい2つの入れ子ループの5〜7行は、各ワークシートをループを使用することです。

コードの8行目の簡素化を図ることができ、これは私がグラデーション塗りつぶしオンラインコードを変更するものです。

最後の行は、ワークシートを保存するために何も言うことはありません。

第三に、完全なコード

import cv2 #导入OpenCV库
import xlsxwriter #利用这个调整行高列宽
import openpyxl #利用这个填充颜色
import numpy as np #下面这两个是数据存储的两种方式,用此种方式处理数据,比列表高效
import pandas as pd

class 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文件放在一起的,不然运行会报错。

IV結論

まあ、すべてのこのようなものが全て行われ、もちろん、ノートへの多くのがあります。

最初は、このセクションの赤、緑、青の抽出数3は、必要な注意を抽出する逆です。

次のとおりです。

ファイル

もちろん、あなたはまた、最終的な結果になるかを確認するために、この値を変更してみてください。ブルー、太陽、赤、空や緑の帽子は、これは自分自身を演じました。

第二には、ノートへのより多くの事に加えて、ノートへのニーズが存在するピクセルが高すぎることができないということです。私はその後、私のi7-6700uオープンExcelが非常に流暢ではない、342 * 218の下でテスト。

あなたは、ステップ2つの画素または4つの画素までの時間を行き来することができますが、私はこれを試していない、それがより明白に粗く(自分の推測では試していない)、または元の画像に変更することがあります。

公開された38元の記事 ウォンの賞賛1 ビュー2185

おすすめ

転載: blog.csdn.net/wulishinian/article/details/104944050