Aplicación utilizando el dibujo de pitón en Excel

I. Introducción

Antes de la universidad, para conocer la cantidad de N para ver el uso Dios dibujo Excel Excel, me siento muy raro. Hoy en día, la escuela por un pitón meses, se expandió quería utilizar el dibujo Excel. Por supuesto, de hecho, usan la palabra inclina menos estricta, de hecho, es el uso de OpenCV a través de cada valor RGB de píxeles y, a continuación, convertir a hexadecimal, el último openpyxl llamada puede ser llenado.

1.1, lograr resultados

Resultados como se muestra archivo

1.2, la necesidad de instalación utilizar la biblioteca

Tenemos que utilizar la biblioteca de la siguiente manera:

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

Además de la primera biblioteca del otro puede ser instalado directamente en la línea de comandos de pepita, o usar el editor de un número de función de instalación automática es también muy conveniente, ver la sección específica III de este artículo.

La primera biblioteca si se instala directamente con PIP3 instalar OpenCV-pitón, entonces, no importa lo rápido que su velocidad se reducirá muy pocos k / s, de la siguiente manera:

archivo

Si se instala bien, espere unos minutos y algunos pueden ser la clave no funciona, la línea roja palabra para ver de dolor de cabeza se produce decenas directamente. Baidu varias veces después de eso es la fuente de los problemas de instalación, utilización de fuentes internas de instalar, utilizar el siguiente comando: instalar -i PIP3 https://pypi.tuna.tsinghua.edu.cn/simple OpenCV en Python

A continuación, estoy listo para instalar la velocidad y se da por comparación con lo anterior, los resultados instalarse directamente

archivo

En segundo lugar, el código de explicar por separado

En este trabajo se utiliza la programación orientada a objetos estaban pensando.

2.1, la definición de objeto y la inicialización

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

Las dos primeras líneas se entiende bien y el formato de inicializar el objeto de definición de objetos.

Image_path y excel_path cuál de estas dos variables es la imagen y la ruta de almacenamiento posterior archivo de Excel ubicación de almacenamiento.

La tercera línea de self.imgviewx = cv2.imread (image_path, cv2.IMREAD_COLOR) significa que la llamada de OpenCV imread leidos imagen. En el que el primer parámetro se crea una instancia cuando el objeto se pasa en la ruta de almacenamiento de imagen. Esta función devuelve una matriz de tres dimensiones, respectivamente, x, y, rgb es coordenadas x, y los valores RGB, correspondientes donde x, y unidades de un píxel. Por último, la matriz tridimensional a una propiedad del objeto imgviewx, espere posteriores llamadas a métodos de objetos. Vamos a imprimirlo como sigue.

archivo

Cuarto atributo fila << >> self.excel_path = excel_path es una instanciación de objetos cuando el excel_path pasado pasó a objetos excel_path, las mismas llamadas a métodos esperar a que un objeto subsiguiente.

2.2, métodos de objeto

1: fila ancho de la columna de ajuste de altura, para evitar la deformación de imagen

#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()

De hecho, puede seguir este ajuste también se puede sobresalir en.

Segunda fila y la tercera fila uno básica para entender es que en un principio se instancia un objeto cuando pasa un camino para crear un libro de trabajo y añadir una hoja de cálculo denominada test.

Un tercer medio de líneas que la columna a la anchura de la columna para la columna 1 se proporciona CAA (Nota: hay un conjunto no sé por qué la hoja de trabajo es de 0,94, el ancho de columna mismo punto)

La cuarta línea significa lo mismo, pero no la línea de alto volumen sólo a través del ciclo.

Como la última parecía cerca, de hecho, la función más importante se guarda sin esta línea, delante de todos, no se guardarán los ajustes.

2.3, el método del objeto en binario hexadecimal 2:10

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

Este método no es elaborado, es una función de la utilización del sistema entra en hex 10 hex 16 hex. Todos sabemos que el inicio de la hexagonal es 0x hexagonal vuelto, y el código hexadecimal de color no está claro, por lo que necesitan para reemplazar eliminado.

Si los valores RGB son menos de 16 a 16 palabras se mostrarán en dígito hexadecimal, pero esto no lo hicieron en el mismo código de color hexadecimal, por lo que la última línea, lo que significa que un número de palabras al principio de 0s.

2.4, el método del objeto 3: la adquisición de r, g, b valores utilizando el método 1 y se convierte en código de color hexadecimal

#获取像素数据并转化为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

En el que el segundo self.excel_size fila () se invoca en esta llamada cuando el primer método de la presente método una altura de la fila de ajuste de ancho de columna. Detrás de nosotros decimos, se refiere a un método de paso de parámetros entre los objetos, dice que seguimos.

La misma estructura Código de tres centenar de de cuarenta-cinco líneas, elegimos un ejemplo. Por ejemplo, la tercera fila data_r = pd.DataFrame (np.array (self.imgviewx) [:,:, 2]) .applymap (self.ten2_16) Este código podemos abrir en el siguiente código:

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

Esta vez es fácil de entender. Los primeros medios de línea que los valores de la lista tridimensional rgb de todos los píxeles incluidos en el objeto de destino se inicializa cuando la imagen comenzó a entrar en una matriz de r y extraerlos.

La segunda fila es una primera fila de la matriz en trama de datos obtenido y almacenado en la variable tmp objeto, para procesar la tercera fila.

La tercera línea es los valores de R fueron convertidos a uso hexadecimal trama de datos de applymap.

La última línea de retorno (data_r + data_g + data_b) .values ​​medios después de la conversión en valores RGB hexadecimales combinados para dar un código hexadecimal de color 16 y convertida en una matriz.

2.5, el método del objeto 4: Color de relleno

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)

La segunda fila rgb_list = self.get_rgb_data () no es familiar, derecho, se llama Método 1 Método 2 cuando se usa.

En el presente método, este es un método que se llama 3 Método 2. La única diferencia es que no hay ningún valor de retorno.

Llamamos a este método y el método en el método 3 2 1 llamada. Así que cuando los objetos fuera usamos sólo para la instancia y llamar al método 3 para realizar la función.

La tercera línea, la cuarta línea es llamar openpyxl.load_workbook abrir nuestro nuevo método en la hoja de prueba de libro.

Entre cinco y siete filas de dos bucles anidados que es fácil de entender es el uso de bucles a través de cada hoja.

Octava línea de código se podría simplificar, esto es lo que puedo modificar un código de línea de relleno degradado.

La última línea es salvar la hoja de trabajo, nada que decir.

En tercer lugar, el código completo

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 Conclusión

Bueno, todo esto se hace todo, por supuesto, hay muchos para nota:

En primer lugar, el número de extracción de color rojo, verde y azul 3 de esta sección es contraria a extraer la atención cuando sea necesario.

De la siguiente manera:

archivo

Por supuesto, también puede intentar cambiar este valor para ver lo que sería el resultado final. sol azul, cielo rojo o un sombrero verde, esto jugó un ustedes mismos.

En segundo lugar, además de más que hay que destacar, es necesario tener en cuenta es que los píxeles no puede ser demasiado alta. Probé bajo 342 * 218, entonces mi i7-6700u abierta Excel no muy fluido.

Puede atravesar el tiempo para dos píxeles o cuatro píxeles de pasos, pero no he probado esto, puede ser granulado más evidente (propia conjetura no intentó), o modificaciones a la imagen original.

Publicado 38 artículos originales · ganado elogios 1 · vistas 2185

Supongo que te gusta

Origin blog.csdn.net/wulishinian/article/details/104944050
Recomendado
Clasificación