文章目录

  • 1. 按
  • 2. 配置环境
  • 3. 原理解读
    • 3.1. 读取Excel表格
    • 3.2. OpenCV读取图像并显示
  • 4. 完整代码
  • 5. 最后一步!超重要

1. 按

不知不觉七夕就过去了!
如果有对象,祝早生贵子!没有对象,祝早结连理!
(搞笑一下,祝大家幸福美满吧,嘿嘿嘿)
给大家准备了一份已经写好的代码,利用Python+OpenCV+OpenPyXl,OpenCV实现读取图片像素颜色,然后OpenPyXl自动填充Excel表格对应单元格背景颜色,得到一副Excel填充图画。
先来看看效果叭(gif动图)!

把图片换成女朋友的真人图像会更逼真,会更加更好看。
然后看代码叭!

2. 配置环境

我们需要用到python以及OpenPyXl、OpenCV和xlsxwriter包,没有下载的小伙伴可以去配置一下,具体可参考:

  • Python3安装教程
  • python3安装cv2
  • Python3安装openpyxl
  • Python3安装xlsxwriter

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

#导入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

3. 原理解读

3.1. 读取Excel表格

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

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

3.2. 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进行Excel表格填充。
还有一步,就是保存了:

wb.save(filename = 'zhaopian.xlsx')  # 保存工作簿
print("保存成功")

4. 完整代码

########################################################################################################################
"""
需要为python环境安装opencv以及openpyxl包
在python终端(看个人环境)执行:
pip install opencv-python
pip install openpyxl
如果有什么问题,请自行百度叭
欢迎关注本人CSDN博客【Coco56】,看更详细教程
用有趣好玩的案例带你学哦
"""
######################################################################################################################### 导入opencv和openpyxl
import cv2 as cv
from openpyxl import load_workbook
from openpyxl.styles import PatternFill
from openpyxl.utils import get_column_letter
import xlsxwriter########################################################################################################################
'''
图片必须jpg格式
程序有一点没能调出来的bug,可能会运行成功但excal无法打开,换一个行宽都小一点的图片就行了,或者利用opencv对图片缩放
'''
########################################################################################################################workbook = xlsxwriter.Workbook('zhaopian.xlsx')  # 打开一个xlsx文件(如果打开的文件存在 ,则清空该文件,如果文件不存在,则新建)
workbook.close()  # 最后关闭文件# 自定义函数,将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# 加载工作簿
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的imread函数读取图片到srcImage
如果按原始大小读取图片,可以改为:srcImage = cv.imread('zhu.jpg')
加上第二个参数33:srcImage = cv.imread('zhu.jpg',33)
表示将原图缩为原来的1/4进行读取。当原图过大是可以采用
'''
srcImage = cv.imread('zhaopian.jpg')  # zhu.jpg为照片名字,自行更改# 获取图像的高,宽并打印
height = srcImage.shape[0]
width = srcImage.shape[1]
print("height:", height, "width:", width)# 遍历循环图片,获取各像素点位置的像素值,并利用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进行颜色填充width = 3.0
height = width * (2.2862 / 0.3612)print("row:", sheet.max_row, "column:", sheet.max_column)
for i in range(1, sheet.max_row+1):sheet.row_dimensions[i].height = height
for i in range(1, sheet.max_column+1):sheet.column_dimensions[get_column_letter(i)].width = widthwb.save(filename='zhaopian.xlsx')  # 保存工作簿
print("保存成功")

5. 最后一步!超重要

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

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

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

还有,别告诉你对象是用代码生成的,告诉她:

“这是我一个一个单元格填充了一个月颜色的成果,我是爱你的,么么哒,带上身份证,咱们去看电影吧~”

OpenCV+Python制作硬核七夕(情人节)礼物相关推荐

  1. python制作礼物_opencv+python制作硬核七夕礼物

    点击上方"蓝色小字"关注我呀 明天就是七夕了! 如果有对象,祝早生贵子!没有对象,祝早结连理! (搞笑一下,祝大家幸福美满吧,嘿嘿嘿) 给大家准备了一份已经写好的代码,利用pyth ...

  2. python制作七夕礼物_opencv+python制作硬核七夕礼物

    点击上方"蓝色小字"关注我呀 明天就是七夕了! 如果有对象,祝早生贵子!没有对象,祝早结连理! (搞笑一下,祝大家幸福美满吧,嘿嘿嘿) 给大家准备了一份已经写好的代码,利用pyth ...

  3. 使用Python turtle快速实现七夕情人节礼物

    马上就到一年一度七夕节啦,如何节碳环保而出奇的向心上人表达心意呢?答案当然是亲手制作视频/卡片/动画类啦,只要有足够的创意,加上技术过硬,效果好到无上限. 今天我就浅浅的使用Python turtle ...

  4. 七夕情人节礼物:爱情花园 v3.2 bug

    七夕情人节礼物:爱情花园 v3.2漏洞   --七夕情人节的礼物,祝天下所有有情人终成眷属! [v3.2版过七夕,侍2.14情人节再更新新版:有任何疑问或建议请联系我 QQ:709155168] 20 ...

  5. 七夕情人节送女朋友什么礼物?七夕情人节礼物推荐

    七夕情人节送女朋友什么礼物最好呢?七夕作为我们的传统情人节,当然送礼物要用心+浪漫啦,今天就给大家介绍几款干货满满的七夕礼物清单吧,有了这些再也不用担心不会挑礼物啦. 一.南卡runner pro3骨 ...

  6. 七夕节送女朋友啥礼物好?七夕情人节礼物推荐

    七夕节,是人间牛郎与天上的七仙女的传说,讲述牛郎与七仙女两地相隔,只能每年的七月初七在鹊桥相见一面,表达的是夫妻之间不离不弃,白头偕老的情感,现在变成了中国的情人节,那七夕节送什么礼物给心仪的女友了? ...

  7. 前端工程师用代码制作特效,七夕情人节成功表白女神,终于摆脱单身

    需求提出 去年七夕的时候,学长突然向我求助:女朋友一直说程序员不懂浪漫,到底该送什么礼物?拿到一个问题首先要分析用户需求:你女朋友有没有透露过她想要什么? 市场调研 学长尴尬一阵,说他女友觉得鲜花虽然 ...

  8. Python制作炫酷七夕照片墙

    写在前面的一些P话: 只要想表白,天天都可以表白!别说没有对象,对象都是自己争取来的~ 那么怎么争取呢?本次教程告诉你技术上合成浪漫照片墙~ 开搞! 第一步:导入所需的模块 import os imp ...

  9. 制作一个简单七夕情人节表白网页(HTML+CSS)

    ❤ 精彩专栏推荐

最新文章

  1. 我竟然混进了Python高级圈子!
  2. Python开发【第5节】【函数基础】
  3. 作为sigmastar代理-启明云端为你分享干货SSD201/202的QT的移植(二)
  4. 错误make: nvcc: Command not found 解决方案
  5. 前端感官性能的衡量和优化实践
  6. 深度残差收缩网络:(三)网络结构
  7. C++_new创建的数组作为参数传递
  8. Linux初级入门(第一次作业)
  9. Python 字符串(三)-字符串操作实例(string替换、删除、截取、复制、连接、比较、查找、包含、大小写转换、分割等)
  10. 为什么一般都使用 List list = new ArrayList() ,而不用 ArrayList alist = new ArrayList()呢?...
  11. silverlight中datagrid数据到处excel
  12. iphone图片编辑画笔_苹果手机截屏后怎么编辑,这么实用你可一定要知道
  13. STM32管脚的复用和重定义功能(RCC_APB2Periph_AFIO)
  14. VMware 安装心得
  15. NetTraffic网络流量监控工具
  16. iOS 299美元企业账号申请流程及注意事项
  17. 这个Python自动扫雷算法写完了,估计看懂的人十不存一了吧
  18. requests登录知乎新版
  19. 什么是透视变形的opencv和python
  20. C\C++中头文件string与string.h的区别

热门文章

  1. 如何用javascript生成网络计算器
  2. edge 浏览器截取全图保存成图片
  3. lisp获取qleader端点_南方CASS和AutoCAD快捷命令大全
  4. PHP判断字符串是否是ipv4还是ipv6
  5. 进程间通信(IPC)介绍
  6. 网络爬虫爬取全国省市区(动态ip代理的获取,实现对ip限制的突破)
  7. Java基础(五)-类的特性
  8. 数据结构与算法_03_分而治之的分治算法
  9. 关于延时队列的一些思考
  10. 小红书推广代运营——新狐网络