基本信息
文件名称:《计算机视觉技术及应用》 项目5 形状识别.pptx
文件大小:34.73 MB
总页数:79 页
更新时间:2025-05-19
总字数:约3.89千字
文档摘要

;(老师能看备注,学生看不到,便于老师上课讲解);下面为备注功能具体操作演示视频;;;;项目目标;图像的轮廓特征是图像中非常重要的一种特征。在实际应用中,经常利用轮廓的大小、形状、位置和方向等特征来进行图像的识别和分类。了解到这一点,小旌打算根据图像轮廓形状的不同,对图像中的交通标志进行识别和分类。

小旌发现,交通标志的形状有一定的规律,如限速标志的形状为圆形,警示标志的形状为三角形,指示标志的形状为矩形。他打算首先对交通标志图像进行预处理,包括色彩空间的转换和高斯滤波,然后对预处理后的图像进行Canny边缘检测和图像轮廓查找与绘制,并根据轮廓查找的结果,对每个轮廓进行形状识别,以实现交通标志的分类。;项目准备;01;边缘检测;边缘检测1.图像梯度;;;;【例5-1】编写程序,对图像“sobel.png”(见本书配套素材“例题图像/sobel.png”)使用Sobel算子分别在x轴和y轴两个方向进行边缘检测,并显示原图像和边缘检测后的图像。;【运行结果】程序运行结果如下图所示。

;;【例?5-2】编写程序,对图像“animal.png”(见本书配套素材“例题图像/animal.png”)分别使用Sobel算子和Scharr算子进行边缘检测,并显示原图像和边缘检测后的图像。;【运行结果】程序运行结果如下图所示。Scharr算子检测出的边缘细节更多。

;;【例?5-3】编写程序,对图像“blossom.png”(见本书配套素材“例题图像/blossom.png”)使用Laplacian算子进行边缘检测,并显示原图像和边缘检测后的图像。;【运行结果】程序运行结果如下图所示。

;边缘检测图像梯度3.使用Laplacian算子进行边缘检测;边缘检测Canny边缘检测;边缘检测图像梯度3.使用Laplacian算子进行边缘检测;;【例?5-4】编写程序,对图像“blossom.png”(见本书配套素材“例题图像/blossom.png”)进行Canny边缘检测,并显示原图像和边缘检测后的图像。;【运行结果】程序运行结果如下图所示。从结果中可以看出,阈值越小,检测出的边缘信息越多;阈值越大,检测出的边缘信息越少。当阈值很高时,只能检测出一些较明显的边缘。;;02;;;图像轮廓轮廓的查找与绘制1.查找轮廓;;【例5-5】编写程序,使用OpenCV对图像“sobel.png”(见本书配套素材“例题图像/sobel.png”)进行轮廓的查找与绘制,并显示原图像和绘制轮廓后的图像。;【运行结果】程序运行结果如下图所示。

;;;【例5-6】编写程序,使用OpenCV对图像“sobel.png”(见本书配套素材“例题图像/sobel.png”)进行轮廓的查找,并计算和显示轮廓的周长和面积。;【运行结果】程序运行结果如下图所示。

;;;【例5-7】编写程序,使用OpenCV对图像“shape.png”(见本书配套素材“例题图像/shape.png”)进行轮廓的查找,分别为轮廓绘制矩形包围框和最小外接圆,并显示原图像、绘制矩形包围框后的图像和绘制最小外接圆后的图像。;【参考代码】

x,y,w,h=cv2.boundingRect(contours[0]) #计算轮廓的矩形包围框

cv2.rectangle(image,(x,y),(x+w,y+h),(0,0,255),3) #绘制矩形框

cv2.imshow(BoundingRect,image) #显示绘制矩形包围框后的图像

#计算轮廓的最小外接圆

(x,y),radius=cv2.minEnclosingCircle(contours[0])

center=(int(x),int(y))

radius=int(radius)

cv2.circle(image1,center,radius,(0,0,255),3) #绘制最小外接圆

cv2.imshow(MinEnclosingCircle,image1)#显示绘制最小外接圆后的图像

cv2.waitKey() #窗口等待,按任意键继续

cv2.destroyAllWindows() #释放所有窗口;【运行结果】程序运行结果如下图所示。

;;【例5-8】编写程序,使用OpenCV对图像“shape.png”(见本书配套素材“例题图像/shape.png”)进行轮廓的查找,分别为轮廓绘制逼近精度为“0.01×轮廓周长”和“0.05×轮廓周长”的近似多边形,并显示原图像、绘制近似多边形后的图像。;【参考代码】

#获取图像轮廓的近似