案例-使用python实现基于opencv的图像excel风格

马上就要情人节了,身为直男的程序员们想好怎么和心仪的女孩表白心声,约会喝奶茶看电影了吗?
程序员当然要实用程序猿专有的浪漫;
将女神图片使用excel填充颜色形式显示出来
需要安装``openpyxl库
pip install openpyxl

#导入各种库
from distutils.filelist import FileList
from turtle import ScrolledCanvas
import cv2
import numpy as np
import openpyxl
#导入字体,边框,颜色以及对齐方式相关的库
from openpyxl.styles import Font,Border,Side,PatternFill,colors,Alignment
#导入excel地址
wb = openpyxl.load_workbook(filename='1.xlsx')
#获取活动的表格
sheet = wb.active
print("open sheet",sheet.title)
print("row",sheet.max_row,"column",sheet.max_column)
secImage = cv2.imread("bank_card4.jpg")
#secImage = cv2.resize(secImage,(int(0.1*secImage.shape[1]),int(0.1*secImage.shape[0])))
cv2.imshow('img',secImage)
h,w = secImage.shape[:2]
#print(h,"w",w)
``

```python
#输入:(0,0,0),输出:000000
#输入:#FFFFFF,输出:(255, 255, 255)
def color_transform(value):
    digit = list(map(str,range(10))) + list("ABCDEF")
    #digit=['0','1', '2', '3', '4', '5','6', '7', '8', '9', 'ABCDEF']
    #  """使用isinstance判断变量单个类型"""
    # 判断变量单个类型,如果是则返回其类型对应的字符
    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)
#遍历图片获取各像素点位置的像素值,并利用openpyxl改写对应位置单元格颜色
for y in range(1,h):
    print("第几行:",y)
    for x in range(1,w):
        #获取蓝绿红三个颜色通道
        blue = secImage[y,x,0]
        green = secImage[y,x,1]
        red = secImage[y,x,2]
        color = (red,green,blue)
        hex_ = color_transform(color)
        fille = PatternFill(fill_type='solid',fgColor=hex_)
        sheet.cell(y,x).fill = fille
        
wb.save(filename='photo.xlsx')
print("保存")

cv2.waitKey()
cv2.destroyAllWindows()

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_33392383/article/details/122866733