python 图片灰度化 opencv-python

1、简介

opencv是一个强大的图像处理和计算机视觉库,实现了很多实用算法,而opencv-python是OpenCV的python接口。直接安装opencv-python包(非官方):

 pip install opencv-python

2、知识点

图片都是像素点

图片是由一个一个的像素点组成的,像素是图像的最小单元,我们右键——>属性去查看图片的信息,看到图片的尺寸如下图:即宽度是372个像素,高度也是300个像素,也就是说这张图片是由一个372 * 300的像素点矩阵构成的,这个矩阵是372行,300列,共有372 * 300 = 111600个像素点。

图片的像素信息

绝大部分图片是 RGB 类型的,即是用RGB(红绿蓝)三原色组成的图片。在图像处理中,用RGB三个分量(R:Red,G:Green,B:Blue),即红、绿、蓝三原色来表示真彩色,R分量,G分量,B分量的取值范围均为0~255,比如电脑屏幕上的一个红色的像素点的三个分量的值分别为:255,0,0

3、图片灰度化

什么叫图片的灰度化呢?其实很简单,就是让像素点矩阵中的每一个像素点都满足下面的关系:R=G=B(就是红色变量的值,绿色变量的值,和蓝色变量的值,这三个值相等),此时的这个值叫做灰度值。

理解一张图片是由一个像素点矩阵构成,就知道我们对图像的处理就是对这个像素点矩阵的操作,想要改变某个像素点的颜色,只要在这个像素点矩阵中找到这个像素点的位置,比如第x行,第y列,所以这个像素点在这个像素点矩阵中的位置就可以表示成(x,y),因为一个像素点的颜色由红、绿、蓝三个颜色变量表示,所以我们通过给这三个变量赋值,来改变这个像素点的颜色,比如改成红色(255,0,0),可以表示为(x,y,(R=255,G=0,B=0))x行y列的像素值为(255,0,0)。

平均值法:

是转化后R,G,B的值为转化前R,G,B的平均值

灰度化后的R=(处理前的R + 处理前的G +处理前的B)/ 3
灰度化后的G=(处理前的R + 处理前的G +处理前的B)/ 3
灰度化后的B=(处理前的R + 处理前的G +处理前的B)/ 3

加权平均法(处理效果最好):

按照一定权值,对R,G,B的值加权平均

灰度化后的R =  处理前的R * 0.3+ 处理前的G * 0.59 +处理前的B * 0.11
灰度化后的G =  处理前的R * 0.3+ 处理前的G * 0.59 +处理前的B * 0.11
灰度化后的B =  处理前的R * 0.3+ 处理前的G * 0.59 +处理前的B * 0.11

最大值发:

使转化后的R,G,B得值等于转化前3个值中最大的一个

   灰度化后的R、G、B=处理前的R、G、B中的最大值

4、代码示例

# 先加载一张图片 打印它的一些关键信息
image = cv.imread("C:/path/to/image/doge.png")
print(image.shape) # (372, 300, 3)
print(image.size) # 334800
print(image.dtype) # uint8
def gray_by_max():
    # 最大值法:使转化后的R,G,B得值等于转化前3个值中最大的一个,即: R=G=B=max(R,G,B)这种方法转换的灰度图亮度很高。
    dst = np.zeros((image.shape[0], image.shape[1], 1), np.uint8)
    for i in range(image.shape[0]):
        for j in range(image.shape[1]):
            dst[i, j] = max(image[i, j][0], image[i, j][1], image[i, j][2])
    print(dst)
    cv.imwrite("C:/path/to/image/doget_max_gray.png", dst)
最大灰度法
def gray_by_avg():
    # 平均值法:是转化后R,G,B的值为转化前R,G,B的平均值。即:R=G=B=(R+G+B)/3  这种方法产生的灰度图像比较柔和。
    dst = np.zeros((image.shape[0], image.shape[1], 1), np.uint8)
    for i in range(image.shape[0]):
        for j in range(image.shape[1]):
            dst[i, j] = (image[i, j][0] + image[i, j][1] + image[i, j][2]) / 3
    print(dst)
    cv.imwrite("C:/path/to/image/doget_avg_gray.png", dst)
平均灰度法
def gray_with_weight():
    # 加权平均值法:按照一定权值,对R,G,B的值加权平均,即:R=G=B=(W(r) * R+ W(g) * G+ W(b) * B),
    # 其中W(x)分别为R,G,B的权值,取不同的值形成不同的灰度图像。由于人眼对绿色最为敏感,红色次之,对蓝色的敏感性最低,因此一般情况下,
    # W(r)=0.299, W(g)=0.587, W(b)=0.114得到的灰度图像效果最好。
    dst = np.zeros((image.shape[0], image.shape[1], 3), np.uint8)
    for i in range(image.shape[0]):
        for j in range(image.shape[1]):
            dst[i, j] = (0.3 * image[i, j][0] + 0.11 * image[i, j][1] + 0.59 * image[i, j][2])
    print(dst)
    cv.imwrite("C:/path/to/image/doget_weight_gray.png", dst)
加权灰度法

streamlit

streamlit – The fastest way to build and share data apps 是专门针对机器学习和数据科学团队的应用开发框架,你可以认为它的目标是取代Flask在机器学习项目中的地位从而帮助机器学习工程师快速开发用户交互工具。

源码传送门: https://github.com/streamlit/streamlit

关于streamlit的介绍和教程网上可以搜到,不再做过多的冗余介绍,当然本篇依旧是入门篇,不过我们会用实际的数据来看一下它基本的效果。我们要用DogeCoin狗狗币的历史数据来画一些有意思的图,并利用streamlit来展示出来,整个过程也是对streamlit的初步认识。废话不多说,开始撸代码。

1、安装

pip install streamlit

2、狗狗币数据一览

DogeCoin数据一览、

3、引入相关python包

import streamlit as st
import pandas as pd
import plotly.graph_objects as go

4、自定义函数

# 加载数据
def load_dogecoin_data():
    ss = pd.read_csv("D:/path/to/dogecoin/doge_history.csv")
    ss = ss.set_index(pd.DatetimeIndex(ss['tickertime']))
    ss = ss.drop(columns=['Unnamed: 0', 'tickertime'])
    ss = ss.sort_index()
    return ss

# 设置开始结束日期
def get_inputs():
    # 设置边框输入栏
    start_date = st.sidebar.text_input("开始日期:", "2019-12-01")
    end_date = st.sidebar.text_input("结束日期:", "2021-05-16")
    return start_date, end_date

# 按日期加载数据
def get_data(start, end):
    data = load_dogecoin_data()
    start = pd.to_datetime(start)
    end = pd.to_datetime(end)
    return data.loc[start: end]

5、数据初始化

_start, _end = get_inputs()
df = get_data(_start, _end)

6、各种画图

fig = go.Figure(data=[go.Candlestick(
    x=df.index,
    open=df['openprice'],
    close=df['closeprice'],
    high=df['high'],
    low=df['low'],
    increasing_line_color='red',
    decreasing_line_color='green'
)])

st.title('Analysis DogeCoin by Streamlit!')
st.header('DogeCoin data')
st.write(df)
st.header('DogeCoin Statistics')
st.write(df.describe())
st.header('DogeCoin Volume')
st.bar_chart(df['vol'])
st.header('DogeCoin Close Price')
st.line_chart(df['closeprice'])
st.header('DogeCoin Candle Stick')
st.plotly_chart(fig)

7、运行

streamlit run streamlit_app.py

8、效果展示

我们可以在浏览器中看到运行的效果,打开浏览器输入地址,http://localhost:8501/

streamlit sidebar效果

在浏览器的左侧边框可以看到初始化的文本框,我们可以自己手动输入日期,然后按回车,那么浏览器对应的其它图会自动从新加载指定日期的数据。

streamlit 基本效果图标1
streamlit 基本效果图2

整个浏览器中看到的图都是动态的,可以通过鼠标滚动或者单击挪动图的具体内容。

参考: https://zhuanlan.zhihu.com/p/85741306

windows 安装 python win10

Python英国发音:/ˈpaɪθən/ 美国发音:/ˈpaɪθɑːn/)是一种广泛使用的解释型高级通用编程语言。Python支持多种编程范型,包括函数式、指令式、结构化、面向对象和反射式编程。它拥有动态类型系统垃圾回收功能,能够自动管理内存使用,并且其本身拥有一个巨大而广泛的标准库。Python由吉多·范罗苏姆创造,第一版发布于1991年,它是ABC语言的后继者,也可以视之为一种使用传统中缀表达式LISP方言[28]

python语言wiki简介

注:本篇文章适合纯入门初学者

1、下载

下载地址:https://www.python.org/

python下载界面

如下图鼠标放在Downloads上会下拉出不同平台的目录,我们直接点击Windows平台;会跳转到如下的连接地址,https://www.python.org/downloads/windows/; 在这个页面我们可以看到最新大版本的不同小版本信息(如python3.9.5 大版本就是指的3.9 ,而小版本号就是最后的那个5)

python下载windows版界面

一般对于开发人员或者数据工作者又或者产品运营自诩数据驱动的兄弟姐们在使用python的时候尽可能不要直接使用最新的版本,而是使用次新或者次次新的稳定版本,为什么呢?

一是因为任何一种语言在版本迭代的时候都都是在修复和完善历史问题或者bug,而新的版本发布后又会有新的这样那样的问题出现,致使我们这些使用者在使用的过程中体验不佳。二是我们一般在网上看到的对应语言的教程都是历史版本的使用方式和书写习惯,而新的版本可能已经做了调整,那么我们在对新版本学习和使用时可能会出现各种问题,不利于所做工作的推进。

我们可以看到在页面里有最新版和2.7的最后版本,由于历史原因2.7已经不再提供维护更新,但是由于2.X版本在python发展历史中浓墨重彩的一段历史诱发的市面上各种牛逼的第三方开源包都是基于2.X的而且也都是针对2.X做的兼容,所以2.7的包还是可以下载的。但是对于纯初学者来说尽可能还是下载3.X版本的安装包。我们选择3.7 次次新的版本。当然读者想下哪个下哪个,只要是 installer就可以,依据自己的喜好就可以,因为对于初学者都一样,玩嘛。

python下载界面微缩一览

2、安装

下载完成后,开始安装,简单明了的双击666,弹出如下图,你可以点击Install Now来直接安装,也可以点击Customize installation 来修改安装路径和一些默认配置,笔者建议,没有安装过的童鞋啥也别想直接点击Install Now

python安装包exe双击后弹出页面

3、修改安装路径

当然你可能有洁癖非要自己改一下安装的位置,就是觉得电脑默认的心理不舒服也是可以的,笔者再次建议,改位置归改位置,别那么多事儿,非得点一点这个点一点那个,看到页面没有修改路径的直接Next,等看到能改安装路径的位置了就去选择要安装的位置,最后再点Install

python修改安装路径步骤1
python修改安装路径步骤2

修改或者不修改安装路径后,点击Install开始安装,等待过程的界面如下图

python安装过程等待界面

注⚠️. 安装完了之后,如果看到如下图的Disable path length limit 的字样,点一下。然后Close

python安装成功可能出现的界面及处理方式

4、验证是否安装成功

1、在键盘上找到 

这个图标的按钮, 按它+R 弹出如下图,输入cmd, 回车,弹出的窗体输入 python -V (V要大写) ,  如果输出 Python 3.7.8 等字样,1.说明安装成功而且环境没有问题,如下图

window打开Dos命令窗口
验证python安装成功

2、如果输出是 “’python’ 不是内部或外部命令,也不是可运行的程序或批处理文件。” 安装成不成功先不说,但是这种情况是需要配置环境变量;自己问一下度娘就可以找到解决方案,https://jingyan.baidu.com/article/fc07f989a830d012ffe5191e.html;按照环境变量的配置方式把配置改好之后再次打开一个新的 cmd(必须是新打开的,之前那个关掉),验证是否有效。