目录

  • OpenCV入门
  • 简介
  • 入门操作
  • 图片
  • 视频
  • 绘图
  • 线段
  • 矩形
  • 圆形
  • 多边形
  • 椭圆
  • 填充多边形
  • 在图像中显示文本字符串
  • 目标检测标注示例
  • 图像的基本操作
  • 获取图像的属性
  • 图像ROI
  • 拆分及合并图像通道
  • 图像扩边(填充)
  • 图像加法、减法
  • 图像混合
  • 位操作
  • 颜色空间转换
  • 几何变换
  • 基础操作
  • 图像阈值
  • 简单阈值
  • 自适应阈值
  • 两者对比
  • 其余可选参数
  • 图像平滑
  • 卷积介绍
  • 均值滤波
  • 方框滤波
  • 高斯滤波
  • 中值滤波
  • 双边滤波
  • 形态学转换
  • 腐蚀
  • 膨胀
  • 开/闭运算
  • 形态学梯度
  • PIL入门
  • 简介
  • Image类
  • 读取图片
  • 读取图片并查看其属性
  • 格式转换并保存图像
  • 创建缩略图
  • 裁剪、粘贴、与合并图片
  • 裁剪
  • 粘贴
  • 分离和合并通道
  • 颜色变换
  • 几何变换
  • 调整大小和旋转
  • transpose()旋转图像
  • transpose()翻转图像
  • 读取动态图像
  • 其他类
  • 图像增强ImageFilter类
  • Filters 过滤器
  • 像素点处理
  • 处理单独通道
  • 高级图片增强ImageEnhance类
  • 绘制图形和文本ImageDraw类


OpenCV入门

简介

OpenCV(Open Source Computer Vision)是一个开源的计算机视觉库,它提供了很多函数,可以非常高效地实现计算机视觉算法。

python 图片美颜_均值滤波

应用领域

  • 人机交互
  • 物体识别
  • 图像分割
  • 人脸识别
  • 动作识别
  • 机器人
  • 汽车安全驾驶

安装OpenCV

pip install opencv-python

调用OpenCV

import cv2

入门操作

图片

  • 加载图片
cv2.imread(filename[, flags])
  • 显示图片
cv2.imshow(winname, mat)
  • 保存图片
cv2.imwrite(filename,img[, params])

python 图片美颜_OpenCV_02


python 图片美颜_python 图片美颜_03

视频

  • 读取本地视频文件,显示视频
cv2.VideoCapture(filename/device)

python 图片美颜_高斯滤波_04


python 图片美颜_python 图片美颜_05

  • 用摄像头录制
cv2.VideoCapture(filename/device)
  • 保存视频文件
cv2.VideoWriter([filename,fourcc,fps,framesize[,isColor]])

python 图片美颜_均值滤波_06

绘图

线段
cv2.Line(img,pt1,pt2,color[,thickness[,lineType[,shift]]])
  • img:图像。
  • pt1:线段的第一个端点。
  • pt2:线段的第二个端点。
  • color:线段的颜色。
  • thickness:线段的粗细程度。
  • line_type:线段的类型如下
    1、8 (or 0) - 8-connected line(8邻接)连接线;
    2、4 - 4-connected line(4邻接)连接线;
    3、CV_AA - antialiased 线条。
  • shift:坐标点的小数点位数。

python 图片美颜_高斯滤波_07


python 图片美颜_python 图片美颜_08

矩形
cv2.rectangle(img,pt1,pt2,color[,thickness[,lineType[,shift]]])

python 图片美颜_均值滤波_09


python 图片美颜_高斯滤波_10

圆形
cv2.circle(img,center,radius,color[,thickness[,lineType[,shift]]])

python 图片美颜_OpenCV_11


python 图片美颜_OpenCV_12

多边形
cv2.polyLines(img,pts,isClosed,color[,thickness[,linrType[,shift]]])

python 图片美颜_OpenCV_13


python 图片美颜_python 图片美颜_14

椭圆
cv2.ellipse(img,center,axes,angle,startAngle,endAngle,color[,thickness[,lineType[,shift]]])

一个参数是中心点的位置坐标。下一个参数是长轴和短轴的长度。椭圆沿逆时针方向旋转的角度。椭圆弧演顺时针方向起始的角度和结束角度,如果是 0 很 360,就是整个椭圆。

python 图片美颜_高斯滤波_15


python 图片美颜_均值滤波_16

填充多边形
  • cv2.fillConvexPoly(img,points,color[,lineType[,shift]])
  • cv2.fillPoly(img,pts,color[,lineType[,shift[,offset]]])(一次填充多个)

python 图片美颜_均值滤波_17


python 图片美颜_python 图片美颜_18


python 图片美颜_均值滤波_19


python 图片美颜_高斯滤波_20

在图像中显示文本字符串
cv2.putText(img,text,org,fontFace,fontScale,color[,thickness[,lineType[,bottomLeftOrigin]]])
  • img:输入图像
  • text:要显示的字符串
  • org:第一个字符左下角的坐标
  • fontFace:字体类型
  • fontScale:字体大小

python 图片美颜_python 图片美颜_21


python 图片美颜_python 图片美颜_22

目标检测标注示例

python 图片美颜_高斯滤波_23


python 图片美颜_均值滤波_24


注意:所有的绘图函数的返回值都是 None,所以不能使用img =cv2.line(img,(0,0),(511,511),(255,0,0),5)等形式。

图像的基本操作

获取图像的属性

python 图片美颜_OpenCV_25

图像ROI

选择dog部分并拷贝到其他区域

python 图片美颜_均值滤波_26


python 图片美颜_均值滤波_27

拆分及合并图像通道
cv2.split(m[,mv])
cv2.merge(mv[,dst])

python 图片美颜_python 图片美颜_28


python 图片美颜_均值滤波_29


python 图片美颜_OpenCV_30


python 图片美颜_均值滤波_31


当调用 imshow(R时,是把图像的R,G,B三个通道的值都变为R的值,所以图像的颜色三通道值为(R,R,R),而 当三个通道d值相同时,则为灰度图。

图像扩边(填充)
cv2.copyMakeBorder(src,top,bottom,left,right,borderType[,dst[,value]])

python 图片美颜_高斯滤波_32


python 图片美颜_OpenCV_33

图像加法、减法
cv2.add(src1,src2[,dst[,mask[,dtype]]])
cv2.subtract(src1,src2[,dst[,mask[,dtype]]])

python 图片美颜_高斯滤波_34


OpenCV 的加法是一种饱和操作:

250+10 = 260 => 255

图像混合
cv2.addWeighted(src1,alpha,sec2,beta,gamma[,dst[,dtype]])

python 图片美颜_高斯滤波_35


python 图片美颜_OpenCV_36


注意:两张图的大小和通道数须相同

位操作
# 与
cv2.bitwise_and(src1,src2[,dst[,mask]])  
# 非
cv2.bitwise_not(src[,dst[,mask]]) 
# 或
cv2.bitwise_or(src1,src2[,dst[,mask]])  
# 异或
cv2.bitwise_xor(src1,src2[,dst[,mask]])

python 图片美颜_高斯滤波_37


python 图片美颜_OpenCV_38

颜色空间转换

有超过150 种转换,经常用到的两种:BGR↔Gray 和 BGR↔HSV。

HSV即Hue(色调),Saturation(饱和度)和Value(亮度)三个channel,RGB是为了让机器更好的显示图像,HSV更贴近人的认知,相比BGR更易区分颜色。

python 图片美颜_python 图片美颜_39

cv2.cvtColor(src,code[,dst[,dstcn]])
cv2.inRange(src,lowerb,upperb[,dst])

python 图片美颜_python 图片美颜_40


python 图片美颜_python 图片美颜_41

几何变换

  • 实现缩放、旋转图片
cv2.resize(src,dsize[,dst[,fx[,fy[,interpolation]]]])
cv2.getRotationMatrix2D(center,angle,scale)
cv2.warpAffine(src,M,dsize[,dst[,flags[,borderMode[,borderValue]]]])

python 图片美颜_高斯滤波_42


python 图片美颜_均值滤波_43

  • 仿射变换

从一种二维坐标(x,y)到另一种二维坐标(u,v)的线性变换

python 图片美颜_高斯滤波_44


python 图片美颜_python 图片美颜_45

cv2.getAffineTransform(src,dst) 
cv2.warpAffine(src,M,dsize[,dst[,flags[,borderMode[,borderValue]]]])

python 图片美颜_高斯滤波_46


python 图片美颜_python 图片美颜_47

基础操作

图像阈值

python 图片美颜_均值滤波_48


python 图片美颜_高斯滤波_49

简单阈值
cv2.threshold(src,thresh,maxvalue,type[,dst])

python 图片美颜_python 图片美颜_50

自适应阈值
cv2.adaptiveThreshold(src,maxvalue,adaptiveMethod,thresholdType,blockSize,[,dst])

python 图片美颜_均值滤波_51

两者对比

python 图片美颜_高斯滤波_52

其余可选参数

python 图片美颜_OpenCV_53

图像平滑

卷积介绍

python 图片美颜_均值滤波_54


python 图片美颜_均值滤波_55


使用padding,不改变图片尺寸

python 图片美颜_均值滤波_56

cv2.filter2D(src,ddepth,kernel[,dst[,anchor[,delta[,borderType]]]])

python 图片美颜_高斯滤波_57


卷积核

python 图片美颜_python 图片美颜_58


python 图片美颜_python 图片美颜_59


python 图片美颜_python 图片美颜_60

均值滤波
cv2.blur(src,ksize,[,dst[,anchor[,borderType]]])

3x3卷积核

python 图片美颜_python 图片美颜_61


python 图片美颜_高斯滤波_62


python 图片美颜_高斯滤波_63

方框滤波
cv2.boxFilter(src,ddepth,ksize[,dst[,anchor[,normalize[,borderType]]]])

3x3卷积核

python 图片美颜_高斯滤波_64


python 图片美颜_高斯滤波_65


python 图片美颜_均值滤波_66


当可选参数normalize为True的时候,方框滤波就是均值滤波,上式中的a就等于1/9;normalize为False的时候,a=1,相当于求区域内的像素和。

高斯滤波

高斯滤波常被称为最有用的滤波器,高斯滤波的卷积核权重:中间像素点权重最高,越远离中心的像素权重越小。

默认的3x3高斯卷积核

python 图片美颜_python 图片美颜_67


python 图片美颜_均值滤波_68

cv2.GuassianBlur(src,ksize,sigmaX[,dst[,sigmaY[,borderType]]])

sigmax值越大,模糊效果越明显

对比均值滤波和高斯滤波

python 图片美颜_高斯滤波_69


高斯滤波相比均值滤波效率慢,但可以有效消除高斯噪声,能保留更多的图像细节

python 图片美颜_OpenCV_70

中值滤波

中值又叫中位数,是所有数排序后取中间的值。孤立的点容易被消除,适用于去除椒盐噪声和斑点噪声。

cv2.medianBlur(src,ksize[,dst])

对比均值滤波和中值滤波

python 图片美颜_python 图片美颜_71


对于斑点噪声图,中值滤波处理的更好

python 图片美颜_python 图片美颜_72

双边滤波
cv2.bilateralFilter(src,d,sigmaColor,sigmaSpace[,dst[,borderType]])

对比高斯滤波和双边滤波

python 图片美颜_python 图片美颜_73


双边滤波明显保留了更多边缘信息

python 图片美颜_python 图片美颜_74

形态学转换

腐蚀

腐蚀的效果是把图片“变瘦”

cv2.erode(src,kernel[,dst[,anchor[,iterations[,borderType[,borderType]]]]])

python 图片美颜_均值滤波_75


python 图片美颜_python 图片美颜_76


python 图片美颜_OpenCV_77

膨胀

膨胀与腐蚀相反,取局部最大值,效果是把图片“变胖”

cv2.dilate(src,kernel[,dst[,anchor[,iterations[,borderType[,borderType]]]]])

python 图片美颜_高斯滤波_78


python 图片美颜_OpenCV_79

开/闭运算
  • 开运算:先腐蚀后膨胀。作用是分离物体,消除小区域。
  • 闭运算:先膨胀后腐蚀。作用是消除(闭合)物体里面的小黑洞。

python 图片美颜_OpenCV_80


python 图片美颜_OpenCV_81

形态学梯度

膨胀图减去腐蚀图,可得到物体的轮廓。

python 图片美颜_OpenCV_82


python 图片美颜_均值滤波_83


python 图片美颜_高斯滤波_84

PIL入门

简介

PIL(Python Image Library)是python的第三方图像处理库,PIL原本只支持python2.x的版本,后移植到python3的pillow库。

python 图片美颜_均值滤波_85


安装PIL

pip install pillow

调用PIL

from PIL import Image

Image类

读取图片

读取图片并查看其属性

python 图片美颜_OpenCV_86

  • format:图像格式
  • size:图像的 (宽,高) 元组
  • mode:RGBA 带透明度的真彩图像
  • show():使用系统默认图片查看器显示图像

python 图片美颜_高斯滤波_87

格式转换并保存图像

python 图片美颜_OpenCV_88


python 图片美颜_高斯滤波_89

创建缩略图

python 图片美颜_python 图片美颜_90


python 图片美颜_高斯滤波_91

裁剪、粘贴、与合并图片

裁剪

python 图片美颜_高斯滤波_92


原图size(352,244),box指的是(left, upper, right, lower)

粘贴

python 图片美颜_python 图片美颜_93


python 图片美颜_均值滤波_94

分离和合并通道

python 图片美颜_python 图片美颜_95


python 图片美颜_python 图片美颜_96

颜色变换
Image.convert()

色彩模式转换为L模式,计算公式如下

L = R * 299/1000 + G * 587/1000 + B * 114/1000

python 图片美颜_高斯滤波_97


python 图片美颜_均值滤波_98

几何变换

调整大小和旋转

python 图片美颜_python 图片美颜_99


python 图片美颜_OpenCV_100

transpose()旋转图像

python 图片美颜_python 图片美颜_101


python 图片美颜_OpenCV_102

transpose()翻转图像

python 图片美颜_均值滤波_103


python 图片美颜_高斯滤波_104


python 图片美颜_OpenCV_105


python 图片美颜_OpenCV_106

读取动态图像

打开动态图像时,PIL 会自动加载序列中的第一帧,使用 seek 和 tell 方法在不同的帧之间移动。

python 图片美颜_OpenCV_107

其他类

图像增强ImageFilter类

Filters 过滤器

对比均值滤波和中值滤波

python 图片美颜_python 图片美颜_108


python 图片美颜_python 图片美颜_109

像素点处理

示例:每个像素点扩大1.8倍

python 图片美颜_高斯滤波_110


python 图片美颜_高斯滤波_111

处理单独通道

python 图片美颜_均值滤波_112


python 图片美颜_OpenCV_113

高级图片增强ImageEnhance类

  • ImageEnhance.Color(im):色彩饱和度
  • ImageEnhance.Brightness(im):亮度
  • ImageEnhance.Sharpness(im):清晰度
  • ImageEnhance.Contrast(im):对比度

增加50%对比度示例

python 图片美颜_均值滤波_114


python 图片美颜_python 图片美颜_115


其他图像增强功能可以使用 ImageEnhance 模块中的类。从图像创建后,可以使用 ImageEnhance 快速调整图片的对比度、亮度、饱和度和清晰度。

绘制图形和文本ImageDraw类

ImageDraw类支持各种几何图形的绘制和文本的绘制,如直线、椭圆、弧、弦、多边形以及文字等。

python 图片美颜_OpenCV_116


python 图片美颜_OpenCV_117