专栏首页用户1692782的专栏opencv+python制作硬核七夕礼物

opencv+python制作硬核七夕礼物

明天就是七夕了!

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

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

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

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

把图片换成女朋友的真人图像会更逼真,会更加更好看。

然后看代码叭!

配置环境

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

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

pip install opencv-pythonpip install openpyxl

下面是我安装openpyxl包的录屏,可以参考一下,也可以跳过。

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

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

读取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.activeprint("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 // 16            a2 = i % 16            string += digit[a1] + digit[a2]        return string    elif 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("保存成功")
cv.waitKey(30)#图片展示30mscv.destroyAllWindows()

完整代码下载链接:

链接: https://pan.baidu.com/s/1QOw28b-8tQpUp2j0qz26rg 提取码:02q9

最后一步!超重要

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

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

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

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

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

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

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

THE END

本文分享自微信公众号 - 视界音你而不同(WorldOfVideoAndAudio)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-08-24

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • opencv+python制作硬核七夕礼物

    给大家准备了一份已经写好的代码,利用python+opencv+openpyxl,opencv实现读取图片像素颜色,然后openpyxl自动填充Excel表格对...

    AI算法与图像处理
  • opencv+python制作硬核七夕礼物

    给大家准备了一份已经写好的代码,利用python+opencv+openpyxl,opencv实现读取图片像素颜色,然后openpyxl自动填充Excel表格对...

    周旋
  • 用Python给女友 准备个绝对甜蜜的七夕礼物

    如果我们把这些甜言蜜语都收集起来,做成一个心爱的甜心,在七夕节的当天送给自己的另一半。这样既用心,而且还很甜蜜的操作,是不是很酷!说干就干,接下来,小安就带领大...

    龙哥
  • 用Python给女友 准备个绝对甜蜜的七夕礼物

    七夕就要到了,在这个有情人终成眷属的好日子里,小安在这里给大家带来Python的小福利,在七夕利用Python制造两个人之间的甜蜜。二人世界里少不了属于两个人之...

    数据森麟
  • 互联网大数据指南 教你过个高逼格的七夕节

    互联网大数据指南 教你过个高逼格的七夕节 ↑ 七夕到了,七夕到了,七夕到了(重要的事情说三遍)…对于这个能给单身狗造成万吨直接伤害的节日,简直是情侣们秀恩爱的神...

    小莹莹
  • 七夕,乐享帮你的同事脱单!

    ----------------手动分割线-----------------      

    腾讯乐享
  • 七夕约会指南|赠《不加班秘籍》,还送女朋友

    想要度过完美的七夕,首先,你得有个男/女朋友… 没有男/女朋友也没关系,留言区写下你的择偶标准和联系方式,万一梦想成真了呢~ 毕竟,关注 Tencent Se...

    腾讯云serverless团队
  • 如何用Python过一个完美的七夕节?

    一年一度的七夕节又到了,每年重复的过,花样各种有,很多男同胞又开始发愁了,该准备点什么呢?前一段时间非常火的电影 “西红市首富” 突然给了我点灵感,男主全城放烟...

    Python数据科学
  • 云+社区视频功能正式上线啦!

    云+社区创作中心内测活动在过去的半个月里得到了各位社区创作者的鼎力支持,社区也收获了满满的意见。云+社区创作中心内测活动已经圆满结束!取而代之的是创作中心内容管...

    云加社区

扫码关注云+社区

领取腾讯云代金券