2022最新计算机视觉学习路线(入门篇)-600学习网

600学习网终身会员188,所有资源无秘无压缩-购买会员

如果你对图像或视频感兴趣或计划做一些与之相关的事情,你绝对应该考虑使用计算机视觉。计算机视觉(CV)是人工智能(AI)的一个分支,它使计算机能够从图像.视频和其他视觉输入中提取有意义的信息,并采取必要的行动。例如,自动驾驶汽车.自动交通管理.监控.基于图像的质量检查等。

什么是OpenCV?

OpenCV是一个主要用于计算机视觉的库。它拥有使用计算机视觉(CV)所需的所有工具。”Open”代表开源,”CV”代表计算机视觉。

我将学到什么?

本文包含了使用OpenCV库开始使用计算机视觉所需的一切。你将在计算机视觉方面感到更加自信和高效。

读取和显示图像

首先,让我们学习如何阅读并显示图片,这是简历的基本知识。读取图像

将numpy导入为np

将cv2导入为cv

将matplotlib.pyplot导入为plt

img=cv2.imread(‘../输入/图像-用于-计算机-视觉/tiger1.jpg’)

“img”包含numpy数组形式的图像。让我们打印它的类型和形状

打印(类型(img))

打印(img.shape)

numpy数组的形状为(6671200,3),

667-图像高度,1200-图像宽度,3-通道数量,

在这种情况下,有RGB通道,因此我们有3个通道。原始图像是RGB,但OpenCV默认将图像读取为BGR,因此我们必须在显示之前将其转换回RGB。

显示图像:

#将图像从BGR转换为RGB显示

img_convert=cv.cvtColor(img,cv.COLOR_BGR2RGB)plt.imshow(img_convert)

慕课、黑马、极客时间、小码哥、拉钩、尚硅谷、开课吧等千套课程打包VIP套餐,IT课程一网打尽

在图像上绘制

我们可以画线条.形状和文字图像。

#矩形

color=(240150240)#矩形的颜涩

cv.矩形(img,(100100),(300300),颜涩,厚度=10,线型=8)##对于填充矩形,使用厚度=-1

##(100100)是矩形左上角点的(x,y)坐标,(300,300)是右下角点的坐标

#圆圈

颜涩=(150260,50)

cv.圆(img,(650350),100,颜涩,厚度=10)##对于填充圆,使用厚度=-1

##(250,250)是圆心的(x,y)坐标,100是半径

#文本

颜涩=(50200100)

字体=cv.font_HERSHEY_脚本_复杂

cv.putText(img,”拯救老虎”,(200150),字体,5,颜涩,厚度=5,线型=20)

#将BGR转换为RGB

img_convert=cv.cvtColor(img,cv.COLOR_BGR2RGB)

plt.imshow(img_转换)

慕课、黑马、极客时间、小码哥、拉钩、尚硅谷、开课吧等千套课程打包VIP套餐,IT课程一网打尽

混合图像

我们还可以使用OpenCV混合两个或更多图像。图像只是一个数字。您可以对数字进行加法.减法.乘法和除法以获得图像。需要注意的一点是,图像的大小应该相同。

#用于一次绘制多幅图像

def myplot(图像.标题):

fig,axs=plt.子地块(1,len(图像),sharey=True)

图集合_图宽度(15)

对于img,ax,zip中的标题(图像,axs,标题):

如果img.shape〔-1〕==3:

img=cv.cvtColor(img,cv.COLOR_BGR2RGB)#OpenCV将图像读取为BGR,因此将其转换回RGB

否则:img=cv.cvtColor(img,cv.COLOR_GRAY2BGR)

ax.imshow(img)

ax.set_标题(title)

img1=cv.imread(‘../输入/图像-用于-计算机-视觉/tiger1.jpg’)

img2=cv.imread(‘../输入/图像-用于-计算机-视觉/马.jpg’)

#调整img1的大小

img1 _ resize=cv.resize(img1,(img2.shape[1],img2.shape[0]))

#加.减.乘.除图像

img_add=cv.add(img1_调整大小,img2)

img_subtract=cv.你好tract(img1_resize,img2)

img_multiply=cv.multiply(img1_调整大小,img2)

img_divide=cv.divit(img1_resize,img2)

#混合图像

img_blend=cv.add加权(img1_resize,0.3,img2,0.7,0)##30%老虎和70%马

myplot(〔img1〕resize,img2〕,〔’老虎’,’马’〕)

myplot([img_add,img_subtract,img_3multiply,img_2divide,img _blend],[‘Addition’,’Subtraction’,’Multiplication’,’Division’,’Blending’])

慕课、黑马、极客时间、小码哥、拉钩、尚硅谷、开课吧等千套课程打包VIP套餐,IT课程一网打尽

乘法图像几乎是白涩的,而分割图像是黑涩的,因为白涩代表255,黑涩代表0。当我们将图像的两个像素值相乘时,我们得到一个更大的数字,因此它的颜涩变成白涩或接近白涩,这与分割图像相反。

图像变换

图像变换包括平移.旋转.缩放.裁剪和翻转。

img=cv.imread(‘../输入/图像-用于-计算机-视觉/tiger1.jpg’)

宽度,高度,_=img.shape

#翻译

M_ translate=np.float32(〔1,0200〕,〔0,1100〕〕)#200=>沿x轴平移,100=>沿y轴平移

img_translate=cv.warpAffine(img,M_transmate,(高度,宽度))

#旋转

中心=(宽/2,高/2)

M_旋转=cv.getRotationMatrix2D(中心,角度=90,比例=1)

img_rotate=cv.warpAffine(img,M_旋转,(宽度,高度))

#缩放

比例_百分比=50

宽度=int(img.shape〔1〕*标度_%/100)

高度=int(img.shape〔0〕*标度_%/100)

dim=(宽度.高度)

img_scale=cv.resize(img,dim,插值=cv.INTER_AREA)

#翻转

img_flip=cv.flip(img,1)#0:沿水平轴,1:沿垂直轴,-1:先沿垂直轴再水平

#剪切

srcTri=np.array(〔0,0〕,〔img.shape〔1〕-1,0〕).astype(np.float32)

dstTri=np.array(〔0,img.shape〔1〕*0.33〕,〔img.shape[1]*0.85,img.shape〔0〕*0.25〕,〔img.shape〕*0.15,ime.shape〔0】*0.7〕).astype(np.float32)

warp_mat=cv.getAffineTransform(srcTri,dstTri)

img_warp=cv.warpAffine(img,warp_mat,(高度,宽度))

myplot([img,img _translate,img _ rotate,img _scale,img_flip,img _3warp]

[“原始图像”.”平移图像”.’旋转图像’.’缩放图像’.”翻转图像”.”剪切图像’])

慕课、黑马、极客时间、小码哥、拉钩、尚硅谷、开课吧等千套课程打包VIP套餐,IT课程一网打尽

图像预处理

阈值处理:在阈值处理中,小于阈值的像素值变为0(黑涩),大于阈值的像素为255(白涩)。

我将阈值设置为150,但您可以选择任何其他数字。

#用于可视化过滤器

按需导入plotly.graph_对象

从plotly.subplots导入make_subplots

定义图_3d(img1.img2.标题):

fig=make_subplot(行=1,列=2,规格=〔〔{’是_3d’:True},{’是_3d’:True〕〕,subplot_titles=〔titles〔0〕,titles〔1〕〕,)

x. y=np.mgrid[0:img1.shape[0],0:img1.shape[1]

图添加_轨迹(go.曲面(x=x,y=y,z=img1〔:,:,0〕),行=1,列=1)

图添加_轨迹(go.曲面(x=x,y=y,z=img2〔:,:,0〕),行=1,列=2)

图update_轨迹(轮廓_z=dict(show=True,usecolormap=True.highlightcolor=”limegreen”,project_z=True))

图show()

img=cv.imread(‘../输入/图像-用于-计算机-视觉/简单的形状.png’)

#像素值小于阈值变为0,大于阈值变为255

_,img _阈值=cv.阈值(img,150255,cv.THRESH _二进制)

plot_3d(img,img_阈值,〔’原始图像’,’阈值图像=150’〕)

慕课、黑马、极客时间、小码哥、拉钩、尚硅谷、开课吧等千套课程打包VIP套餐,IT课程一网打尽

应用阈值后,值150等于255

过滤:图像过滤通过改变像素值来改变图像的外观。每种类型的滤波器根据相应的数学公式改变像素值。我不会在这里详细介绍数学,但我将通过在3D中可视化每个过滤器来展示它们是如何工作的。

limg=cv.imread(‘../输入/图像-用于-计算机-视觉/简单的形状.png’)

#高斯滤波器

ksize=(11,11)#两者都应该是奇数

img_高斯=cv.高斯模糊(img,ksize,0)

plot_3d(img,img,guassian,[“原始图像”,”guassian图像”])

#中值滤波器

ksize=11

img_medianblur=cv.medianblur(img,ksize)

plot _3d(img,img _medianblur,[“原始图像”,”中值模糊”])

#双边过滤器

img_双边模糊=cv.双边滤波器(img,d=5,sigmaColor=50,sigma空间=5)

myplot(〔img,img_双边模糊〕,〔’原始图像’,’双边模糊图像’〕)

plot_3d(img,img_双边模糊,[“原始图像”,”双边模糊”])

慕课、黑马、极客时间、小码哥、拉钩、尚硅谷、开课吧等千套课程打包VIP套餐,IT课程一网打尽

高斯滤波器:通过去除细节和噪声来模糊图像。

中值滤波器:非线姓过程可用于减少脉冲噪声或椒盐噪声

双边滤波器:边缘保持和降噪平滑。

简言之,滤波器有助于减少或消除亮度或颜涩随机变化的噪声,这称为平滑

特征检测

特征检测是通过计算图像信息的抽象来对每个图像点进行局部决策的方法。例如,对于一张脸的图像,特征是眼睛.鼻子.嘴唇.耳朵等。我们试图识别这些特征。

让我们首先尝试识别图像的边缘。

边缘检测

img=cv.imread(‘../输入/图像-用于-计算机-视觉/简单的形状.png’)

img_cann1=cv.Canny(img,50,200)

#在将img喂给canny之前先将其平滑

滤波器_ img=cv.高斯模糊(img,(7,7),0)

img_Canny 2=cv.Canny(过滤器_img,50,200)

myplot([img,img_canny1,img_2canny2]

[“原始图像”.”Canny边缘检测器(无平滑)”.”Canny边缘检测器”(带平滑)]

慕课、黑马、极客时间、小码哥、拉钩、尚硅谷、开课吧等千套课程打包VIP套餐,IT课程一网打尽

这里我们使用Canny边缘检测器,这是一种边缘检测算子。它使用多级算法来检测图像中的各种边缘。它是由John F.Canny于1986年开发的。我不会详细介绍Canny的工作原理,但这里的关键是它用于提取边缘。

在使用Canny边缘检测方法检测边缘之前,我们先对图像进行平滑以去除噪声。正如您从图像中看到的,我们在平滑后获得清晰的边缘。

概述

img=cv.imread(‘../输入/图像-用于-计算机-视觉/简单的形状.png’)

img _ copy=img.copy()

img_灰涩=cv.cvt颜涩(img,cv.COLOR_BGR2GRAY)

_,img _二进制=cv.阈值(img _灰涩,50200,cv.THRESH _二进制)

#Edroing和Dilating以获得平滑轮廓

img_binary_erode=cv.erode(img_binary,(10,10),迭代=5)

img_二进制_扩张=cv.扩张(img_二进制,(10,10),迭代=5)

轮廓,层次=cv.findContours(img_二进制,cv.RETR_树,cv.CHAIN_近似_简单)

cv.drawContours(img,轮廓,-1,(0,0255),3)#在原始图像上绘制轮廓,就像绘制函数一样

myplot([img_copy,img],[‘原始图像’,’图像中的轮廓’])

慕课、黑马、极客时间、小码哥、拉钩、尚硅谷、开课吧等千套课程打包VIP套餐,IT课程一网打尽

侵蚀,使用侵蚀操作检测并减少图像中包含的结构元素的形状。

膨胀:将像素添加到图像中对象的边界,而不是侵蚀

慕课、黑马、极客时间、小码哥、拉钩、尚硅谷、开课吧等千套课程打包VIP套餐,IT课程一网打尽

船身

simg=cv.imread(‘../输入/图像-用于-计算机-视觉/简单的形状.png’,0)

_,阈值=cv.阈值(img,50255,cv.THRESH _二进制)

轮廓,层次=cv.findContours(阈值,cv.RETR_树,cv.链_近似_简单)

船体=〔等高线中c的cv.凸面船体(c)〕

img_hull=cv.drawContours(img,hulls,-1,(0,0255),2)#在原始图像上绘制轮廓,就像绘制函数一样

plt.imshow(img)

慕课、黑马、极客时间、小码哥、拉钩、尚硅谷、开课吧等千套课程打包VIP套餐,IT课程一网打尽

总结

我们已经了解了如何读取和显示图像.在图像上绘制形状和文本.混合两幅图像.旋转.缩放.平移和变换图像.使用高斯模糊.中值模糊和双边模糊过滤图像,以及使用Canny边缘检测和搜索图像中的轮廓来检测特征。

免责声明: 1、本站信息来自网络,版权争议与本站无关 2、本站所有主题由该帖子作者发表,该帖子作者与本站享有帖子相关版权 3、其他单位或个人使用、转载或引用本文时必须同时征得该帖子作者和本站的同意 4、本帖部分内容转载自其它媒体,但并不代表本站赞同其观点和对其真实性负责 5、用户所发布的一切软件的解密分析文章仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。 6、您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。 7、请支持正版软件、得到更好的正版服务。 8、如有侵权请立即告知本站,本站将及时予与删除 9、本站所发布的一切破解补丁、注册机和注册信息及软件的解密分析文章和视频仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。如有侵权请邮件与我们联系处理。
600学习网 » 2022最新计算机视觉学习路线(入门篇)-600学习网