明天就是七夕了!

如果有对象,祝早生贵子!没有对象,祝早结连理!

(搞笑一下,祝大家幸福美满吧,嘿嘿嘿)

给大家准备了一份已经写好的代码,利用python+opencv+openpyxl,opencv实现读取图片像素颜色,然后openpyxl自动填充Excal表格对应单元格背景颜色,得到一副Excal填充图画。文末代码下载链接。

先来看看效果叭(gif动图)!

(换成你女朋友的照片,效果会比二次元好很多,因为更加逼真了)
然后看代码叭!

配置环境

我们需要用到python以及openpyxl和opencv包,没有下载的小伙伴可以去配置一下,超级简单:

大概就是在python终端(看个人环境)执行:

pip install opencv-python
pip install openpyxl

配置完成后就是导入我们需要的包了,这儿不需要过多了解:

#导入opencv和openpyxl
import openpyxl
import cv2 as cv
import numpy as np
from openpyxl import load_workbook
from openpyxl import workbook
# 导入字体、边框、颜色以及对齐方式相关库
from openpyxl.styles import Font, Border, Side, PatternFill, colors, Alignment

读取Excal表格

我们首先需要读取一个xlsx格式的Excal表格,需要提前在工作路径或者某绝对路径进行创建,并自定义命名,然后我们得到了一个表格对象sheet,就可以对它进行读写设置等操作了。

#设置路径
#file_path = r"L:\jupyter notebook_code\file\zhaopian.xlsx"  #绝对路径
# 加载工作簿
wb = load_workbook(filename='zhaopian.xlsx') #默认工作路径,zhaopian.xlsx为Excal表格名称,自行更改
# 获取活动中的表格
sheet = wb.active
print("open sheet:", sheet.title) #打印表格标题
print("row:", sheet.max_row, "column:", sheet.max_column)

opencv读取图像并显示

#opencv读取图像并显示
'''
opencv的imread函数读取图片到srcImage
如果按原始大小读取图片,可以改为:srcImage = cv.imread('zhu.jpg')
加上第二个参数33:srcImage = cv.imread('zhu.jpg',33)
表示将原图缩为原来的1/4进行读取。当原图过大是可以采用
'''
srcImage = cv.imread('zhaopian.jpg') #zhu.jpg为照片名字,自行更改
cv.imshow('image',srcImage)#获取图像的高,宽并打印
height = srcImage.shape[0]
width = srcImage.shape[1]
print("height:", height, "width:", width)

利用opencv将图像读取进来,之后我们就要利用for循环遍历图像的各个像素值了,但在这之前我们需要自定义一个函数,因为我们是用openpyxl包的

PatternFill(fill_type='solid',fgColor= 'FFFFFF')

函数填充单元格颜色的,该函数只能设置十六进制的颜色格式:

所以我们需要自己写一个函数将RGB颜色格式转换为十六进制:

#自定义函数,将RGB颜色值转换为16进制的字符串格式
def color_transform(value):digit = list(map(str, range(10))) + list("ABCDEF")if isinstance(value, tuple):string = ''for i in value:a1 = i // 16a2 = i % 16string += digit[a1] + digit[a2]return stringelif isinstance(value, str):a1 = digit.index(value[1]) * 16 + digit.index(value[2])a2 = digit.index(value[3]) * 16 + digit.index(value[4])a3 = digit.index(value[5]) * 16 + digit.index(value[6])return (a1, a2, a3)

该函数实现的功能:

输入:(0,0,0),输出:000000
输入:#FFFFFF,输出:(255, 255, 255)

好了,解决了颜色转换,我们就遍历像素吧!

#遍历循环图片,获取各像素点位置的像素值,并利用openpyxl改写对应位置单元格颜色
for y in range(1, height):print("第几行:",y) #供查看进度for x in range(1, width):Blue_value = srcImage[y,x,0] #获取蓝,绿,红三个通道Green_value = srcImage[y,x,1]Red_value = srcImage[y,x,2]color = (Red_value,Green_value,Blue_value) #转为元组并附给color_transform函数得到16进制hex_ = color_transform(color)fille = PatternFill(fill_type='solid',fgColor= hex_) #设置颜色sheet.cell(y,x).fill=fille #openpyxl进行颜色填充

具体大家看注释了,大概就是遍历像素并读取RGB像素值,然后传给color_transform函数进行转换,然后赋值给openpyxl的PatternFill进行Excal表格填充。

还有一步,就是保存了:

wb.save(filename = 'zhaopian.xlsx')  # 保存工作簿
print("保存成功")cv.waitKey(30)#图片展示30ms
cv.destroyAllWindows()

完整代码下载链接:

链接:如果失效了可以来公众号【Opencv视觉实践】找我拿。
https://pan.baidu.com/s/1QOw28b-8tQpUp2j0qz26rg
提取码:02q9

最后一步!超重要

上面程序完毕之后,我们只是完成了单元格的填充,但我们知道,单元格不是正方形,运行完图片是扁平的:

所以还需要我们手动更改一下单元格的大小,其实openpyxl也是可以做到的,但我也是第一天用openpyxl,也不熟练,能动手就动手吧,毕竟最麻烦的已经完成了。

还有还有!在发给对象之前,一定把excal表格打开看一下,确保是这样的:

也就是缩放正常的表格,只有这样,当她滚动鼠标滚轮进行缩放,渐渐变成下图这样时,才会有惊喜嘛!

如果直接一打开就是上图,和一个照片也没什么两样,也就没那么惊喜了,是不是?

THE END

兄弟们,看在我昨晚熬夜调BUG的份上,不要吝啬你们的赞了!

详细注释版代码下载链接:
https://pan.baidu.com/s/1QOw28b-8tQpUp2j0qz26rg
提取码:02q9

python写七夕超硬核礼物!相关推荐

  1. mysql long类型_怒肝两个月MySQL源码,我总结出这篇2W字的MySQL协议详解(超硬核干货)!!...

    点击上方蓝色"冰河技术",关注并选择"设为星标" 持之以恒,贵在坚持,每天进步一点点! 作者个人研发的在高并发场景下,提供的简单.稳定.可扩展的延迟消息队列框架 ...

  2. 十一长假我肝了这本超硬核PDF,现决定开源!!

    写在前面 在 [冰河技术] 微信公众号中的[互联网工程]专题,更新了不少文章,有些读者反馈说,在公众号中刷 历史文章不太方便,有时会忘记自己看到哪一篇了,当打开一篇文章时,似乎之前已经看过了,但就是不 ...

  3. 【Nginx】冰河又一本超硬核Nginx PDF教程免费开源!!

    写在前面 在 [冰河技术] 微信公众号中的[Nginx]专题,更新了不少文章,有些读者反馈说,在公众号中刷 历史文章不太方便,有时会忘记自己看到哪一篇了,当打开一篇文章时,似乎之前已经看过了, 但就是 ...

  4. 超硬核!兔兔阿里p7学长给的面试知识库

    一个阿里p7学长给的nosql面试知识库,绝对真实,学会了去面呀. 最近整理了一下超硬核系列的文章和面经系列的文章,可以持续关注下: 超硬核系列历史文章:(我保证每篇文章都有值得学习的地方,并且对小白 ...

  5. 超硬核!苏州同程旅游学长给我的全面的面试知识库

    超硬核!苏州同程旅游学长给我的全面的面试知识库 1.简介 新生和经验丰富的C#面试常见问题解答 2.什么是C#? 3.用示例说明C#中的注释类型 4.可以执行多个catch块吗? 5. public, ...

  6. 超硬核!花33小时来造台3D打印机吧~

    超硬核!花33小时来造台3D打印机 3D打印机在实际应用中还是有不少用武之地的,从零开始直接买材料回来自己组装可以有效地提高性价比,用最低的价钱打造一台性价比不错的机子.这里我就用大概两天的时间,成本 ...

  7. 超硬核!!!一篇文章搞定TCP、UDP、Socket、HTTP(详细网络编程内容+现实解释三次握手四次挥手+代码示例)【网络编程 1】

    TCP.UDP.Socket 一天面试的经验: 什么是网络编程 网络编程中两个主要的问题 网络协议是什么 为什么要对网络协议分层 计算机网络体系结构 1 TCP / UDP 1.1 什么是TCP/IP ...

  8. 超硬核之傅里叶公式推导(上)

    超硬核之傅里叶公式推导 1.三角函数系与正交性 2.周期(2pi)函数的傅里叶展开(三角形式) 3.找到周期函数傅里叶展开的系数 结语 前言:再学习数学推导之前,popcorn建议读者感性的先去理解一 ...

  9. 超硬核Java学习路线图+学习资源+实战项目汇总,看完以后不用再问我怎么学Java了!

    之前写过很多次关于Java学习指南.Java技术路线图的文章.但是总还是有小伙伴来问我,Java怎么学,项目怎么做,资源怎么找,真是让人头秃. 于是这次黄小斜决定来一波狠的,把所有这些内容都整理起来, ...

最新文章

  1. 【带你重拾Redis】Redis 主从架构
  2. 另类无法在ESXi上添加存储器故障
  3. 骑行318、 2016.7.8
  4. Linux上的WebSphere MQ开发快速入门
  5. xxx cannot be resolved to a type 错误解决方法
  6. shiro密码正确也会匹配错误_Shiro学习之——Shiro与Web集成
  7. 域名授权系统源码 网站源码授权系统_单域名授权系统
  8. 生活中的这些难题,数据库开发者可为你解决!
  9. 拼多多开卖劳斯莱斯,直降122万,10万人表示想拼!
  10. 1004. 成绩排名 (20)-PAT乙级真题
  11. ffmpeg屏幕推流
  12. vb mysql 查询_VB数据库记录查询四法
  13. stm单片机的后缀含义
  14. 怎么把计算机的网络设置弄成家庭,如何设置家庭Wi-Fi网络
  15. 上海大学计算机学院领军人物,上海大学计算机工程与科学学院研究生导师简介-谢 江高级工程师...
  16. 【标签画像系列】标签体系建设方法论
  17. hive使用,及语法
  18. CSS中id选择器和类选择器的区别
  19. 区块链隐私保护文献 An Efficient NIZK Scheme for Privacy-Preserving Transactions over Account-Model Blockchain
  20. uiuc的计算机工程硕士学费标准,美国计算机硕士留学费用全都在这了!

热门文章

  1. SpringBoot + Spring data JPA使用方言(自定义函数、一些自带函数)
  2. 【大学生软件测试基础】长方体体积 - 边界测试
  3. 说说short s = 1; s = s + 1;有没有问题?如果有怎么解决?
  4. sap 服务器 拷贝文件,本文示例如何使用SAP FTP Function将文件从应用服务器传输到另外一个FTP服务器上。...
  5. mathtype 章节号 Equation Chapter 1 Section 1 的去除
  6. (二十三)admin-boot项目之captcha验证码整合
  7. 大豆技术面分析_技术贴 | GIS三维视域分析—面要素
  8. 网站加入QQ在线即时交谈的代码
  9. linux rcs 应用程序,Linux下的rcS文件的一些分析
  10. linux不启动修改rcs文件,linux根文件系统制作之rcS文件分析