本文是根据github上的项目所写 更多详情可以参见github其地址为:github
软件开发人员和其他人经常将计算机视觉视为一个很难进入的领域。在本文中,我们将使用一系列Microsoft Excel公式,使用Microsoft Excel中实现的示例算法从基础知识中学习计算机视觉。我们将使用一个惊喜技巧,帮助我们在Excel中实现和可视化诸如人脸检测,霍夫变换等算法,而无需依赖任何脚本或第三方插件。
图像基础知识
在开始这一话题前我们要先了解图片的构成,像素点是最小的图像单元,一张图片是由好多的像素点组成例如一张图片尺寸是500 * 338 的,表示图片是由一个500 * 338的像素点矩阵构成的,这张图片的宽度是500个像素点的长度,高度是338个像素点的长度,共有500 * 338 = 149000个像素点。因为一个像素点的颜色是由RGB三个值来表现的,所以像素点矩阵对应三个颜色向量矩阵,分别是R矩阵(500 *338大小),G矩阵(500 *338大小),B矩阵(500 *338大小)。如果每个矩阵的第一行第一列的值分别为:R:240,G:223,B:204,所以这个像素点的颜色就是(240,223,204),而在灰度图中灰度图只体现图像明暗的数值,可以通过图片的RGB值来计算出图像相应的灰度值,所以当一个图像转化为一个数组值彩色图片对应的是一个三维像素矩阵,而这个图片对应的灰度图像所转化成的数组应该是一个二维像素矩阵。
在看完本文你会很清晰的明白这个道理.
使用python读取图片像素值
首先准备一张图片如下(我准备的是神仙姐姐)
然后运行以下代码:
import numpy as np
import cv2
##读取为灰度图
img = cv2.imread('2.jpg',0)
from openpyxl import Workbook
from openpyxl.utils.dataframe import dataframe_to_rows
import pandas as pd
#这个就是我们要导出的Dataframe
##保存并导出像素值矩阵
dataframe = pd.DataFrame(img)
wb = Workbook()
ws = wb.active
for r in dataframe_to_rows(dataframe, index=True, header=True):
ws.append(r)
wb.save("2.xlsx")
在上面代码中由于我们的excel是一个二维数据表,而图片读取进来是一个三维数组(包含图片的高度和宽度以及通道数一般通道数都为3,),为了便于处理所以读进来的图应该是一个二维的灰度图像的像素矩阵
运行上面
Excel可视化
首先打开我们的刚刚保存excel,就可以看到excel表中每一个值都是这个图片所对应像素值
我们选中全部数值,并找到条件格式里的色阶,并选择其他规则
将格式样式选择成三色刻度,并将值设置成以下,然后缩放比例到最小就可以查看效果
由于图片分辨率太高,我们的excel最小只能缩放到10%,所以只能这样了,但是换一张小一点的图可以很好地看到效果
好了到目前为止我们这个文章的工作就结束了,从本文我们可以知道,其实就可以明白计算机在图片处理里也是运用了Excel中的色阶的原理通过图片像素矩阵中每一个像素值对应着相应的颜色比例的映射,我们的灰度图像中对应的是黑白色(黑白色其实也是三原色的映射R=G=B=255为白色,R=G=B=0为黑色,R=G=B=小于255的某个整数时,此时就为某个灰度值)的映射,而彩色图像中对应的RGB三原色的映射。