YOLOv8图像分类器训练,PPT基础技巧,opencv初步学习
一.使用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
实战:




更多推荐

所有评论(0)