首页 > 编程知识 正文

边缘检测有哪些应用,计算机视觉能做什么

时间:2023-05-03 16:35:29 阅读:150928 作者:2534

一.图像滤波平滑和模糊导致失焦,图像细节不可见。 即,像素点和周围的像素点混合在一起。 有助于边缘检测。 常用的平滑方法有平均值、大气爆米花、中值和双边滤波。 例如以下所示。

import c v2 ascvimportnumpyasnptest _ image=cv.im read (r ' e : (kaggledata (computer _ version _ data )4. jpg ' ted 特点:核中区域贡献率相同。 作用:对椒盐噪声滤波效果较好' ' ' blurred=NP.h stack ([ cv.blur (test _ image,) 3,3 ) ]、cv.blur ) test_image blurred ) ) ) cv2.guassianblur (img,ksize,sigmaX,sigmaY ) )大气爆米花过滤描述:仅指定sigmaX,sigmaX sigmaX时如果两者都为零,则根据内核大小进行计算。 特征:核中区域贡献率与区域中心距离成正比,权重与大气爆米花分布相关。 作用:大气爆米花模糊在从图像中去除大气爆米花噪声方面非常有用。 第三个参数0是核大小“' ' blurred=NP.h stack ([ cv.Gaussianblur (test _ image,) 3,3 ),0 )”,cv.Gaussian blur 表示自动计算0 ) (7,7,0 ) ) ) cv.imshow ) Gaussian )、blurred )、cv2.medianblur(img,k )中值过滤器说明作用:对椒盐噪声有效。 ' ' ' blurred=NP.h stack ([ cv.medianblur (test_image,3 ),cv.median blur ) test _ image,5 ),cv.median blue blurred (' '双边过滤器: cv2.bilateralfilter(img,d,sigmaColor, sigmaSpace双边滤波器的d是邻域直径,sigmaColor是空间大气的爆米花函数标准偏差,参数越大,表示相邻像素越远的sigmaSpace灰度值的相似性大气的爆米花函数标准偏差双边滤波是一种非线性滤波方法,是结合图像空间贴近度和像素值相似度的折衷处理,同时考虑空间和信息与灰度的相似性,达到边缘去噪的目的,具有简单、非重复、局部处理的特点。 之所以能获得边缘保留去噪的滤波效果,是因为滤波器由两个函数组成。 一个函数由几何空间距离确定滤波器系数,另一个函数由像素差分确定滤波器系数。 特点:处理需要时间。 作用:滤波的同时可以保证一定的边缘信息。' ' ' blurred=NP.h stack ([ cv.bilateralfilter (test_image,5,21,21 ),cv.bilateral filter ) test _ image,7 4440

原始图像

平均滤波图像效果

大气爆米花过滤器

“中值滤波器

双边过滤

二、边缘检测“”边缘检测方法有Canny,主要包括平滑降噪、梯度求解、非极大值抑制和滞后阈值。' ' import c v2 ascvtest _ image=cv.im read (r ' e : (kaggledata (computer _ version _ dat

atest.jpg')cv.imshow("test_image", test_image)# 颜色空间转换gray_image = cv.cvtColor(test_image, cv.COLOR_BGR2GRAY)# 大气的爆米花降噪blured = cv.GaussianBlur(gray_image, (5, 5), 0)cv.imshow("blured", blured)# 边缘检测""" void cvCanny( const CvArr* image,CvArr*edges,double threshold1,double threshold2, int aperture_size=3 ); 参数列表: image 输入单通道图像(可以是彩色图像)对于多通道的图像可以用cvCvtColor(将图像从一个颜色空间转换到另一个颜色空间的转换)修改。 edges 输出的边缘图像,也是单通道的,但是是黑白的 threshold1 第一个阈值(低阈值) threshold2 第二个阈值(高阈值) aperture_size Sobel 算子内核大小(滤波计算矩阵的大小默认为3)可以是1、3、5、7 函数 cvCanny 采用 Canny 算法发现输入图像的边缘而且在输出图像中标识这些边缘。 注释:threshold1和threshold2 当中的小阈值用来控制边缘连接,大的阈值用来控制强边缘的初始分割。 高阈值比较严格,求的边缘很少,认为高阈值的边缘都是有效。低阈值宽松,求的边缘很多(一般包括了高阈值求到的边缘),其中不少是无效的边缘(反正不想要的)。 先用高阈值求边缘。canny求得的边缘希望是连在一起的(通常是封闭的),但高阈值求的边缘一般断断续续。断开的地方如果低阈值求的边缘存在,就用低阈值的边缘接上去,目的让边缘尽量都连在一起。其它情况下低阈值的边缘是不用的。 两个阈值是有区别的,高的那个阈值是将要提取轮廓的物体与背景区分开来,就像阈值分割的那个参数一样,是决定目标与背景对比度的,低的那个阈值是用来平滑边缘的轮廓,有时高的阈值设置太大了,可能边缘轮廓不连续或者不够平滑,通过低阈值来平滑轮廓线,或者使不连续的部分连接起来"""canny = cv.Canny(blured, 30, 150)cv.imshow("Canny", canny)cv.waitKey(0)

三、人脸和眼睛检测实例

 1.OpenCV人脸检测的xml文件下载
      人脸检测和眼睛检测要用到haarcascade_eye.xml和haarcascade_frontalface_default.xml这两个文件,文件下载地址:https://download.csdn.net/download/bigData1994pb/19399564?spm=1001.2014.3001.5501

2.人脸识别

import cv2 as cvimage = cv.imread(r'E:kaggleDatacomputer_version_Data5.jpg')gray_image = cv.cvtColor(image, cv.COLOR_BGR2GRAY)cv.imshow('gray_image', gray_image)# 进行人脸识别必须导入XML文件,然后就可以使用detectMultiScale进行目标(人脸)检测face_xml = cv.CascadeClassifier('E:kaggleDatacomputer_version_DataOpenCV_xmlhaarcascade_frontalface_default.xml')eye_xml = cv.CascadeClassifier('E:kaggleDatacomputer_version_DataOpenCV_xmlhaarcascade_eye.xml')# 利用face_xml.detectMultiScale()方法识别出人脸的位置,并利用cv2.rectangle()绘制方框faces = face_xml.detectMultiScale(gray_image, scaleFactor=1.05, minNeighbors=5, minSize=(30, 30), flags=cv.CASCADE_SCALE_IMAGE)print("这张图中有%d个人脸" % len(faces))# 绘制出识别到的人脸for (x, y, w, h) in faces: cv.rectangle(image, (x, y), (x+w, y+h), (255, 0, 0), 2) cv.imshow('dst', image)

3.眼睛识别

        在做眼睛识别的过程中遇到了问题,就是把鼻子也识别成了眼睛,大家知不知道什么原因,可以给我留言,感谢。

# 眼睛识别和人脸识别类似,不过眼睛识别是在人脸识别的基础上再进行识别的,所以将人脸的图片进行灰度化处理,再识别# 眼睛识别并用方框圈出眼睛的位置face_gray = gray_image[y:y+h, x:x+w]face_color = image[y:y+h, x:x+w]# 眼睛识别eyes = eye_xml.detectMultiScale(face_gray)print("在这张脸上有%d个眼睛" % len(eyes))# 绘制出识别到的眼睛for (e_x, e_y, e_w, e_h) in eyes: cv.rectangle(face_color, (e_x, e_y), (e_x+e_w, e_y+e_h), (0, 255, 0), 2) # 绘制眼睛方框cv.imshow('dst', image)cv.waitKey(0)

 

 

 

 

 

 

 

 

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。