参考:
python写七夕硬核礼物! - 周旋机器视觉的文章 - 知乎
https://zhuanlan.zhihu.com/p/196451223
# -*- coding:utf-8 -*-
# 导入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
#############################################################################################################################################
'''
图片必须jpg格式
程序有一点没能调出来的bug,可能会运行成功但excal无法打开,换一个行宽都小一点的图片就行了,或者利用opencv对图片缩放(详见程序第61行)
'''
#############################################################################################################################################
# 自定义函数,将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)
# 设置路径
file_path = r"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的imread函数读取图片到srcImage
如果按原始大小读取图片,可以改为:srcImage = cv.imread('zhu.jpg')
加上第二个参数33:srcImage = cv.imread('zhu.jpg',33)
表示将原图缩为原来的1/4进行读取。当原图过大是可以采用
'''
srcImage = cv.imread('a.jpg') # zhu.jpg为照片名字,自行更改
cv.imshow('image', srcImage)
# 获取图像的高,宽并打印
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进行颜色填充
wb.save(filename='zhaopian.xlsx') # 保存工作簿
print("保存成功")
cv.waitKey(30) # 图片展示30ms
cv.destroyAllWindows()