一.使用YOLOv8制作图像分类器

训练代码:

训练完成:

判断是否是一个好模型的方法:损失下降,准确率上升

成功运用图像分类器

二.PPT基础技巧

1.五大分区

(1)画布编辑区(演示区域)

可以对PPT当中所有元素进行位置摆放和挪动,展示画面效果

(2)顶部功能区

文件选项卡:新建,打开,保存,设置PPT

开始选项卡:新建幻灯片,文本框编辑,排列调整ppt中的元素

插入选项卡:插入图片,图表,形状,3D模型,Smartar图形(流程循环图,层次图,框架图,棱锥图),文本框

绘图选项卡

设计选项卡

切换选项卡:在两张幻灯片之间加上一个转场动画

动画选项卡:对页面元素添加动画

幻灯片放映选项卡:从头开始放映,从当前页面开始放映

(3)左侧功能区

预览整个PPT页面(缩略图),增加幻灯片页面,设置背景格式,隐藏幻灯片

(4)右侧功能区

对PPT元素进行效果设置(透明度,填充方式)

(5)底部功能区

幻灯片放映,放大或缩小画布(Ctrl+鼠标滑轮),备注(提词器)在幻灯片放映选项卡中点击使用演讲者视图

2.基础技能

(1)新建幻灯片,保存幻灯片

(2)页面尺寸设置技巧

以放映端设备尺寸为准,遵循页面尺寸等比例原则

幻灯片页面尺寸最大142.24cm

# 通过设计选项卡里幻灯片大小进行调整

(3)母版使用技巧

# 母版不等于模板

母版中包含可出现在每一张幻灯片上的显示元素,如文本占位符,图片,动作按钮等。每个演示文稿的每个关键组件都有一个母版

母版帮助快速统一ppt排版的底板样式(给PPT添加logo)

母版上添加元素后编辑页面无法拖动

(4)参考线的使用技巧

规范PPT页面的三大要素:标题栏,页边距,版心

参考线精确对齐物体(编辑页面可以看到,放映页面不会显示)

在页面空白区域点击右键,选择网格和参考线(可设置颜色),没有需要在视图选项卡里勾选参考线,Ctrl+拖拽可复制参考线

参考线结构:三长(固定标题栏位置7,控制版心顶部位置6,固定版心底部位置8)两短(左右页边距14.6)

(5)主题色和字体

主题色变换:设计选项卡右侧变体,下拉选择颜色

设计主题:主题色一定要选择框出来的区域里的颜色

主题字:设计选项卡右侧变体,下拉选择字体

课时三:计算机眼中的图像

1.图像基本操作

图像由无数个小格组成,每一个小格为一个像素点,值为0(黑)-255(白)

R(红)G(绿)B(蓝)为图像颜色通道(彩色图才会有颜色通道),每个通道都是一个矩阵

灰度图只有单通道,仅用亮度值表示,无RGB三通道

2.数据读取—图像

cv2.IMREAD_COLOR(彩色图)

cv2.IMREAD_GRAYSCALE(灰度图)

import cv2 #opencv读取格式是BGR
import matplotlib.pyplot as plt #绘图展示
import numpy as np #数值计算
%matplotlib inline #魔法指令,用于在notebook中自动显示图像,无需调用plt.show()

img=cv2.imread(r'C:\test.jpg') #读取图像

dtype=uint8 #像素点值范围在0-255之间

#图像的显示,也可以创建多个窗口
cv2.imshow('image',img)
#等待时间,毫秒级,0表示任意键终止,其他数表示多少毫秒后自动终止(eg:10000=10秒)
cv2.waitKey(0)
#关闭所有窗口
cv2.destroyAllWindows()

输出shape值,h,w,c

读取灰度图:

cv2.imshow('image',img)
cv2.waitKey(0)
cv2.destroyAllWindows()

#保存 cv2.imwrite('xxx.jpg',img)

#数据储存为numpy的ndarray格式

#像素点的个数 img.size

#数据类型 img.dtype

课时四:视频的读取与处理

cv2.VideoCapture()#指定视频路径或摄像头设备号(0表示默认摄像头)

isOpened()#验证视频是否能够正常打开

vc.read() #逐帧读取

终止 #读取到None或用户按下ESC键(值为27时)退出循环

每一帧读取后需要把彩色图像转换成灰度图像,然后显示

30帧/秒为人眼感知流畅的临界值,15帧/秒会出现明显卡顿

课时五:ROI区域(图像中需要重点关注的区域)

1.截取部分图像数据

0:800 #从第0行/列到第800行/列(不包括800)的像素范围

h=800,w=800,截取高度800,宽度800像素的矩形区域

2.颜色通道提取

默认顺序为BGR(不是常见的RGB)

[:,:,0]为蓝色通道,[:,:,1]为绿色通道,[:,:,2]为红色通道

cv2.split(img)直接分离为b,g,r三个单通道图像

cur_img[:,:,n]单独获取特定通道

单通道shape值为h,w,比原图缺少一个维度

原图shape值为h,w,3

只保留R(红色效果):

将其他两个通道值为零来突显目标通道

只保留G(绿色效果):

只保留B(蓝色效果):

课时六:边界填充和数据计算

1.边界填充

#上下左右填充的值

#填充方法

2.数值计算

逐像素追加法 #在原始图像的每一个像素点上都+10,整体shape值不变

#维度相同才能相加

普通加法 #相加后得到的数值>255时,值%256(用相加得到的数-256),得到输出的数(eg:38),可能会丢失高亮信息

#相加得到的数值>255,取255,保留高光区域信息

Numpy加法 #模运算处理溢出

Opencv加法 #饱和处理溢出

3.图像融合

#shape值相同才能进行融合操作

#把目标值设为0,指定x,y

 

课时七:图像阈值和图像平滑处理

1.图像阈值

src #输入图,只能输入单通道图像,通常为灰度图

thresh #阈值(eg:127)

maxval #当像素值超过了阈值(或者小于阈值,根据type来决定),所赋予的值(最大值255)

type #二值化操作类型

二值化,反二值化,截断阈值,零阈值,反零阈值

dst #输出图

2.图像平滑处理

通过平滑处理操作去除白色噪音点

(1)均值滤波

eg:3*3的矩阵,数值相加求平均

(2)方框滤波

不做归一化,容易越界,越界值(>255)均取255

课时八:高斯与中值滤波

1.高斯滤波

以均值为中心,标准差决定曲线陡峭程度,离中心越近,发挥效果越强,离中心越远,发挥效果越弱(正态分布)

根据距离中心点远近分配不同权重,eg:中心点设为1,相邻点设为0.8,四个角设为0.6

(5,5) #卷积核大小,1 #标准差参数

2.中值滤波

用邻域像素的中值代替中心像素值,eg:对3*3区域从小到大进行排序,取第五个值

课时九:腐蚀和膨胀操作

1.腐蚀操作

(1)读取图像

通常处理二值图像(黑白)背景黑(0),前景白(255)

处理前景物体边缘的毛刺 eg:去掉文字边缘的细小毛刺

(2)处理函数

去除文字边缘的细小毛刺,文字线条变细

每次迭代都会使物体边界向内收缩一圈

(3)卷积核

3*3矩阵(卷积核)

核在图像上滑动,若核覆盖区域存在背景像素(0),将核中心像素置为背景色

全白则保持原状

#越靠近边缘的点越容易被腐蚀,形成“层层向内”的效果

# 核越大腐蚀范围越大,单次操作可腐蚀更多像素(毛刺大小决定核最小尺寸,需保留细节特征决定核最大尺寸)

# 迭代次数(在前一次的结果上进行下一次腐蚀) 1次去除最外层边缘 2次物体明显缩小 3次主体几乎完全不见

2.膨胀操作

(1)读取图像

通过扩大图像中的前景区域来恢复被腐蚀操作削弱的有效信息

(2)处理函数

使图像中的主体变大,填补小的空洞和断裂

# 迭代次数 1次轻微膨胀 2次明显扩张 3次强烈膨胀(可能接近填满边界)

# 核范围内存在白色像素,中心像素膨胀为白色

(3)逆运算

先腐蚀去除毛刺后膨胀恢复目标尺寸

课时十:开运算与闭运算 梯度运算 礼帽和黑帽

1.开运算(先腐蚀,再膨胀)

处理带有毛刺边缘的图像,消除细小毛刺的同时保持主体形状(毛刺消失但主体线条宽度不变)

腐蚀:消除图像中的细小噪音和毛刺

膨胀:恢复主体结构的原始尺寸

2.闭运算(先膨胀,再腐蚀)

无法消除已有毛刺且会使主体线条略微变粗

#开运算消除毛刺(去噪),闭运算填充小孔(连接断裂部分)

3.梯度运算(膨胀—腐蚀)

7*7的核对图像进行5次迭代操作(计算图像中白色区域的边界宽度)

膨胀 #变胖,对白色区域进行扩大

腐蚀 #变瘦,对白色区域进行缩小

没有先后顺序,都是独立操作,通过膨胀后的图像减去腐蚀后的图像,得到物体轮廓

适用于图像分割,边缘检测等需要提取物体边界的任务

4.礼帽和黑帽

礼帽=原始输入—开运算结果

黑帽=闭运算结果—原始输入

(1)礼帽

开运算去除了原始图像中的毛刺,用原始图像减去开运算结果就会只剩下毛刺(原文字消失,仅保留文字边缘的细小噪音

(2)黑帽

闭运算保留了原始图像中的毛刺并增加了主体线条宽度,用闭运算结果减去原始图像(毛刺消失),保留文字主体轮廓

课时十一:Sobel算子

3*3的核从左到右从上到下依次设为p1 p2 p3 p4 p5 p6 p7 p8 p9(距离中心越近数值越大 eg:p6,越远数值越小eg:p3,p9)

1.读取图像

梯度 #边界点(边缘位置产生梯度 eg:左边黑色右边白色的点/主体和主体之间连接的缝隙)

水平像素点差异值Gx=p3-p1+2p6-2p4+p9-p7(右减左)(<0的值直接取0)

竖直像素点差异值Gy=p7-p1+2p8-2p2+p9-p3(下减上)

G=|Gx|+|Gy|

2.处理函数

dst=cv2.Sobel(src,ddepth,dx,dy,ksize)

src #传入当前图像

ddepth #传入图像深度(通常为-1,表示输出深度和输入深度的值一样)

dx,dy #水平竖直方向

ksize #Sobel算子的大小(指定多大的核)

CV_64F #在取绝对值之前,输出负数

白到黑是正数,黑到白是负数,所有负数都会被截断成0,所以要取绝对值

课时十二:梯度计算方法

水平方向:

竖直方向:

cv2.convertScaleAbs #数值转换,把负数加绝对值,转换为正数

求和:

不建议直接计算:

# 会发生断裂和融合不完全的情况

实战:

import cv2

def cv_show(img, name='image'):
    cv2.imshow(name, img)
    cv2.waitKey(0)
    cv2.destroyAllWindows()
img = cv2.imread(r'C:\test.jpg', cv2.IMREAD_GRAYSCALE)
sobelx = cv2.Sobel(img,cv2.CV_64F,1,0,ksize=3) #只算水平方向
sobelx = cv2.convertScaleAbs(sobelx)
sobely = cv2.Sobel(img,cv2.CV_64F,0,1,ksize=3) #只算竖直方向
sobely = cv2.convertScaleAbs(sobely)
sobelxy = cv2.addWeighted(sobelx,0.5,sobely,0.5,0)
cv_show(sobelxy,'sobelxy')

课时十三:scharr算子和laplacian算子

1.scharr算子

# 与sobel算子区别:数值更大,结果差异更敏感

2.laplacian算子

其他算子:一阶导

laplacian算子:二阶导(一阶导的变化率),对一些变化更敏感,对噪音点敏感,与其他方法共用

G=p2+p4+p6+p8-4p5

中间点与边缘点比较,边缘点有四个,所以中间点为-4

scharr算子:关注点更多,更敏感,线条更丰富

laplacian算子:效果不太好,需要与其他工具一起使用

课时十四:边缘检测(Canny边缘检测)

流程:

(1)使用高斯滤波器,以平滑图像,滤除噪声

(2)计算图像中每个像素点的梯度强度和方向

(3)应用非极大值抑制,以消除边缘检测带来的杂散响应

(4)应用双阈值检测来确定真实和潜在的边缘

(5)通过抑制孤立的弱边缘最终完成边缘检测

1.高斯滤波器

# 中心点数值最大,距离中心点越远,数值越小

归一化处理得到中心点的数值,把所有数值sum相加,得到中心点最终数值,所有像素点都完成高斯滤波后,就完成了图像平滑处理

2.梯度和方向

# 使用Sobel算子,先算出Sx和Sy,再sum相加算出Gx和Gy,求方向

3.非极大值抑制

方法一:

w:权重参数  w=(g1,dtmp1)/(g1,g2)

c>dtmp1且c>dtmp2,c保留,反之,c被抑制

方法二:

一个像素点周围八个像素,固定成八个方向,看角度,离哪个方向更近,就是哪个方向

A分别与B,C比较,A>B,且A>C,A保留,得出A的边界

4.双阈值检测

梯度值>maxval:处理为边界(eg:A)

梯度值<minval:舍弃(eg:D)

minval<梯度值<maxval:连有边界则保留,否则舍弃(eg:C与边界A连在一起,保留;B没有与边界连接,舍弃)

实战:

80 #minval    150 #maxval

值越大,边缘信息越少;值越小,边缘信息越大

课时十五:图像金字塔定义和制作方法

定义:把图像组合成像金字塔一样的形状

应用:图像特征提取(不止对原始输入进行特征提取,还要对金字塔的每一层进行特征提取,并总结到一起)

1.高斯金字塔:向下采样法(缩小)

越采样越少(从大往小走) 

Gi与高斯内核卷积:对应位置相乘,再加到一起,再除以总数

 2.高斯金字塔:向上采样法(放大)

越采样越多(从小往大走)

实战:

3.拉普拉斯金字塔

Li=img(输入)—先执行down再执行up后的结果

G0:原始输入 G1:down  E1:up

实战:

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐