最近看B站视频,有大佬徒手用excel一个格子一个格子填充,撸出了钢铁侠的图片,惊奇的同时,我思考,用python是否可以更快速的完成呢? 既然原理是将excel的每一个单元格当作一个像素块,那我们是否可以通过opencv获取图片每个像素的RGB值,然后通过python对excel进行操作,给每个单元格填充相应的颜色。 1.安装python中使用opencv需要的相关的库 如果安装速度过慢可以尝试切到清华源安装 2.安装win32com库用于对excel表格进行操作 这边安装的坑挺多的,大家根据具体的问题百度吧 3.准备一个excel文件,并将其行高列高改为相同 1.绘制过慢问题 2.报错:不同的单元格格式太多 在制作《星空》的时候出现了“不同的单元格格式太多”的error 图片大小:300×300 单身的小伙伴可以通过这个方法制作一个想要追求的女生的肖像画,并告诉她这是你耗时三个月一格一格填充制作的(良心有点痛),那女生必定感动到痛哭流涕~~ 不单身的小伙伴也可如此 希望对你有帮助,谢谢!
一.引言
二.任务分解
三.准备工作
进入cmd命令,输入:pip install wheel
pip install numpy
pip install opencv-python
最初我是使用openpyxl写的但是它对填色方面做的并不是很友好,所以改用win32com库来操作
进入cmd命令,输入:pip install pypiwin32
Ctrl+a 全选表格
调整行列宽为相同,使得最终单元格呈正方形
修改效果如下:
4.准备一张图片
建议图片像素不要太高,建议一开始先选择(100×100即总像素为10000左右的图片)实验
图片大小可以直接通过windows自带的照片查看器修改
四.具体代码实现
import win32com.client from win32com.client import DispatchEx from ctypes.wintypes import RGB import cv2 import numpy as np #color_total用于存储RGB颜色 color_total=[] #img_file为你要画的图片的名称,图片放在于.py同一个文件目录下 用绝对路径会报错(我也不知道为啥) img_file='1.jpg' #读取图片文件 img_a=cv2.imread(img_file) # cv2默认为BGR顺序,将顺序转为RGB img_color=cv2.cvtColor(img_a, cv2.COLOR_BGR2RGB) #返回height,width,以及通道数,因为不用所以省略掉 h, l, _ = img_a.shape #打印图片总行数和列数,即竖向有多少像素,横向有多少像素 print('行数%d,列数%d' % (h, l)) #将颜色数据添加到color_total中,颜色数据方面采集完成 for i in img_color: color_total.append(i) #Win32#打开EXCEL excel = win32com.client.DispatchEx('Excel.Application') #要处理的excel文件路径#out.file是文件 绝对路径 WinBook = excel.Workbooks.Open('D:\代码\Python\1.xlsx') #要处理的excel页 WinSheet = WinBook.Worksheets('Sheet1') #设置单元格颜色 #excel中[1,1]代表的是第一行第一列的单元格,而数组中[0][0]代表的是第一行一列 #其中color_total[x-1][y-1][0]对应的是第x行第y列图像R的值 color_total[x-1][y-1][1]代表G color_total[x-1][y-1][2]代表B for x in range(1,h): for y in range(1,l): WinSheet.Cells(x, y).Interior.Color = RGB(color_total[x-1][y-1][0],color_total[x-1][y-1][1],color_total[x-1][y-1][2]) #打印正在进行描绘的像素的位置 print(x,y) #保存 WinBook.save #关闭 WinBook.close
五.过程中可能遇到的问题(必看)
因为是两层嵌套for循环,所以会很慢,建议图片大小先事先进行修改,粗略估算总像素为10000时(100×100),遍历大概需要1分钟,500×500需要半个小时,小伙伴们可以根据自己的需求设置图片大小
这主要是由于你图片的颜色过于丰富,且像素过多导致的。
Excel存储的单元格样式数量的上限为(Excel 2003上限是4000个,Excel2007以后是64000个),而咱们每在单元格填充一个不同的颜色就会算作一个样式,所以理论上咱们的总像素的颜色种类不能超过64000个。
当遇到这种问题时,将图片大小调小即可解决问题(虽然牺牲了像素)
所以咱们在制作的时候,在不出现明显马赛克的情况下,尽量不要让图片太大六.效果展示
毕竟这色彩太丰富了(心里默默难受)
最初图片设置的是(400×244),由于颜色过多,报错了
不得已只能牺牲像素设置成 (300×183)
图片大小:400×494
520给女朋友的肖像画、
PS:男朋友耗时三个月一格一格填充制作、
本网页所有视频内容由 imoviebox边看边下-网页视频下载, iurlBox网页地址收藏管理器 下载并得到。
ImovieBox网页视频下载器 下载地址: ImovieBox网页视频下载器-最新版本下载
本文章由: imapbox邮箱云存储,邮箱网盘,ImageBox 图片批量下载器,网页图片批量下载专家,网页图片批量下载器,获取到文章图片,imoviebox网页视频批量下载器,下载视频内容,为您提供.
阅读和此文章类似的: 全球云计算