在openCV中,我们可以对图片的轮廓进行检测,虽然轮廓的检测看起来很简单,只是对一个图形的边框进行描绘,但是,它在很多领域上都应用到了,例如:人脸识别、车辆检测、视频采集等,下面我会通过人脸识别和车辆检测两部分为大家展示。

1.轮廓的概述

轮廓:轮廓是由一系列具有相同或类似的BGR值或灰度值连续的点构成的曲线,可用于形状分析以及物体的检测和识别。

轮廓与边缘的区别:

边缘是数字图像中亮度变化明显的点所构成的曲线。

边缘检测是检测出轮廓的边缘,轮廓检测是提取图像的轮廓。

边缘检测关注的是图像的边缘,轮廓检测关注的是轮廓构成的图像。

轮廓的绘制:cv2.drawContours(image,contours,contoursIdx,color,thickness,lineType)

参数说明:

dst : 目标图像

image:画布

contours:需要绘制的轮廓

contoursIdx:绘制轮廓的索引

color:绘制颜色

thickness:画笔粗细

lineType:绘制的线型

轮廓框定:

最小外接圆

(x,y),radius=cv2.minEnclosingCircle(points)

(x,y) :圆心

radius :半径

points :被框定的轮廓

外接矩阵:

x,y,w,h = cv2.boundingRect(array)

x:左上顶点坐标

y:右下顶点坐标

w:轮廓矩形的宽

h:轮廓矩形的高

2.轮廓检测

import cv2
import numpy as np
# img=cv2.imread('tsy.jpg')
img=cv2.imread(r'D:\shixunxiangmu\opencv.quan\opencv\lunkuo1.jpg')
gray=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
ret,binary=cv2.threshold(gray,150,255,cv2.THRESH_BINARY)  #二值化
#轮廓查找,第二个参数表示找最外层的轮廓,第三个参数表示存储压缩后的数据
轮廓,层级=cv2.findContours(binary,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE)
print(轮廓)
# print(层级)
#绘制轮廓
cv2.drawContours(img, 轮廓, -1, (0, 0, 255), 5)# #计算面积
# 面积=cv2.contourArea(轮廓[1])
# print(面积)
# #计算周长
# 周长=cv2.arcLength(轮廓[1],True)
# print(周长)
cv2.imshow('lunkuo',img)
cv2.waitKey()

原图:

识别图:

例1:车辆检测

#四大步:加载视频、车辆的识别、车辆的统计、将车辆信息显示出来
#引入两个重要的库
import cv2
# import numpy as np
#加载视频、通过形态学识别车辆、对车辆进行统计、显示车辆统计信息
cap=cv2.VideoCapture(r'D:\shixunxiangmu\openCV\che.mp4')
# 去背景,运动物体为前景,静止物体为背景
bgsubmog=cv2.bgsegm.createBackgroundSubtractorMOG()
min_w=36  #最小宽值
min_h=55  #最小高
line_high=245 #检测线的高度
offset=8 #线的偏移量
carnumber=0
cars=[] #存放有效的车辆
#求车的中心点,来进行车辆的统计
def center(x,y,w,h):x1=int(w/2)y1=int(h/2)cx=x+x1cy=y+y1return cx,cy
#腐蚀卷积核
kernel=cv2.getStructuringElement(cv2.MORPH_RECT,(5,5))
while True:ret,frame=cap.read()if ret==True:# mask = bgsubmog.apply(blur)#灰度化cv2.cvtColor(frame,cv2.COLOR_BGR2GRAY)# print(frame.shape)#高斯滤波去噪blur=cv2.GaussianBlur(frame,(7,7),5)#获取去背景后的数据mask=bgsubmog.apply(blur)#腐蚀,去掉图中的小方块,比如说车灯、车牌等等erode=cv2.erode(mask,kernel)# cv2.imshow('erode',erode)#膨胀,把车辆还原dilate=cv2.dilate(erode,kernel,iterations=3)# cv2.imshow('dilate',dilate)#闭操作,去除内部的噪点,也就是小方块,可以自己进行调节,达到最优close=cv2.morphologyEx(dilate,cv2.MORPH_CLOSE,kernel)close = cv2.morphologyEx(close, cv2.MORPH_CLOSE, kernel)#去除完背景以及车辆内部的噪点,就可以进行轮廓的查找了#轮廓查找返回两个值,轮廓和层级,cnts,h=cv2.findContours(close,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE)#绘制检测线cv2.line(frame,(10,line_high),(1200,line_high),(255,255,0),3)for (i,c) in enumerate(cnts):(x,y,w,h)=cv2.boundingRect(c)#绘制车辆的外界矩形#对车辆的宽高进行判断,验证是不是是有效的车辆isVlid=(w>=min_w) and (h<=min_h)if (not isVlid):continue#在原图上进行矩形的绘制cv2.rectangle(frame, (x, y), (x + w, y + h), (0, 0, 255), 2)center5=center(x,y,w,h)cars.append(center5)for (x,y) in cars:if (y>line_high-offset) and (y<line_high+offset):carnumber+=1cars.remove((x,y))print(carnumber)cv2.putText(frame,"cars count:"+str(carnumber),(100,60),cv2.FONT_HERSHEY_SIMPLEX,2,(255,0,0),5)cv2.imshow('video',frame)key=cv2.waitKey(60)if key==ord('q'):break
#去除背景,creatBackgroundSubtractorMOG(...)
cap.release()
cv2.destroyAllWindows()

在这个例子中,不仅应用到了轮廓检测,还有很多其他的应用,腐蚀、灰度化、二值化、去噪都有涉及,所以,如果需要,也可以采纳。在这里,我们需要注意的是获取视频的路径,代码中是我的视频路径,所以如果直接粘贴复制,可能会报错哦!

下面是视频截图:

例2:人脸识别

import cv2# 载入人脸检测的Cascade模型
FaceCascade = cv2.CascadeClassifier(r'D:\python2\python\Lib\site-packages\cv2\data\haarcascade_frontalface_default.xml')# 载入带有人脸的图片
img = cv2.imread(r'face.png')
# 将彩色图片转换为灰度图
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)# 创建一个窗口 名字叫做Face
cv2.namedWindow('Face',flags=cv2.WINDOW_NORMAL | cv2.WINDOW_KEEPRATIO | cv2.WINDOW_GUI_EXPANDED)# 检测画面中的人脸
faces = FaceCascade.detectMultiScale(gray,scaleFactor=1.1,minNeighbors=5
)# 遍历返回的face数组
for face in faces:# 解析tuple类型的face位置数据# (x, y): 左上角坐标值# w: 人脸矩形区域的宽度# h: 人脸矩形区域的高度(x, y, w, h) = face# 在原彩图上绘制矩形cv2.rectangle(img, (x, y), (x+w, y+h), (0, 255, 0), 4)# 在窗口Face上面展示图片img
cv2.imshow('Face', img)
# 等待任意按键按下
cv2.waitKey()
# 关闭所有的窗口
cv2.destroyAllWindows()

效果展示:

在这个代码中,我们只是对照片的人脸识别,我们还可以对视频进行人脸识别,如果你拥有代码,欢迎你评论分享给大家!!

Opencv中的轮廓检测及应用相关推荐

  1. OpenCV中图像轮廓检测

    OpenCV中图像轮廓检测 通过之前的Canny方法可以得到图像的边界,但是我们无法得到边界的数学信息.所以就有了今天的图像轮廓检测. 在OpenCV中图像轮廓检测的API: findContours ...

  2. opencv中关于轮廓检测识别Contours及相关函数的介绍

    最近在用vs和opencv库在做图像处理的项目,关于轮廓识别部分,我查阅了一些资料, 现结合自己的理解整理出来,希望能对你有用. 1.contours概述 在利用openCV对图像进行处理时,我们可能 ...

  3. OpenCV-Python 中文教程15——OpenCV 中的轮廓

    OpenCV-Python 中文教程15--OpenCV 中的轮廓 一.初识轮廓 目标 • 理解什么是轮廓 • 学习找轮廓,绘制轮廓等 • 函数: cv2.findContours(), cv2.dr ...

  4. OpenCV中的轮廓及性质

    转:https://www.kancloud.cn/aollo/aolloopencv/272892 OpenCV中的轮廓 1.1什么是轮廓 轮廓可以简单认为成连续的点(连着边界)连在一起的曲线,具有 ...

  5. OpenCV 中的轮廓-轮廓的层次结构

    轮廓的层次结构 目标 现在我们要学习轮廓的层次结构了,比如轮廓之间的父子关系. 原理 在前面的内容中我们使用函数 cv2.findContours 来查找轮廓,我们需要传入一个参数:轮廓提取模式(Co ...

  6. opencv中的侧脸检测

    opencv中的侧脸检测 opencv中的haarcascade_profileface.xml检测时只能检测右侧脸 Opencv 2.4.3以后添加了侧脸检测,要想检测侧脸只需将加载的文件改为haa ...

  7. OpenCV学习笔记(12)——OpenCV中的轮廓

    什么是轮廓 找轮廓.绘制轮廓等 1.什么是轮廓 轮廓可看做将连续的点(连着边界)连在一起的曲线,具有相同的颜色和灰度.轮廓在形态分析和物体的检测和识别中很有用. 为了更加准确,要使用二值化图像.在寻找 ...

  8. opencv:图像轮廓检测-细胞轮廓

    对于下面的图像,进行细胞(有彩色的都是细胞)的轮廓识别,要求分割尽可能准确,轮廓是封闭的曲线. 个人的思路: 第一:通过opencv读取图片: 第二:对原图进行灰度化处理,简化矩阵,提高处理速度: 第 ...

  9. opencv中的人脸检测案例

    案例:人脸检测 利用OpenCV中自己已经训练好的检测器 1 检测流程 1.读取图片,并转换为灰度图像 2.实例化人脸和眼睛检测的分类器对象 # 实例化级联分类器 face_cas = cv.Casc ...

最新文章

  1. python 的保留字
  2. 演练5-3:Contoso大学校园管理系统3
  3. codeforce 154C - Double Profiles(hash)
  4. 如何快将数据集划分为train、val(Python3代码模板)
  5. PaddleHub教程合集
  6. 绝地求生服务器维护内容,绝地求生最新更新维护几点开始? 绝地求生10.30更新维护内容...
  7. 别再用硬编码写业务流程了,试试这款轻量级流程编排框架
  8. 可以运行python的路由器_用python管理Cisco路由器
  9. mp-mtgsig 美团iOS 签名逆向工程分析
  10. python变异系数,Python Scipy stats.variation()用法及代码示例
  11. 橘子学设计模式之原型模式
  12. spec文件知识整理
  13. 【工具】kindle 怎么用微信读书
  14. [附源码]Python计算机毕业设计二手书交易软件设计与实现
  15. Python微信公众号教程基础篇——收发文本消息
  16. WNMP环境搭建(Win10+Nginx+MySQL+PHP)
  17. AppKey和AppSecret的关系
  18. java文件打包jar文件_把java文件打包成.jar (jar命令详解)
  19. 解决移动硬盘可以识别,但不显示盘符的问题
  20. bit、Byte、bps、Bps、pps、Gbps的详细说明及换算

热门文章

  1. oc引导win方法_安装win10+黑苹果双系统零基础教程(图文)
  2. android 免费游戏推荐,10款免费Android小游戏推荐
  3. 中国全部专利申请与授权数据
  4. 线性规划与网络流24题 太空飞行计划问题 (最小割及输出方案)
  5. pythonxpath语法_xpath语法
  6. 明天的节日,赠女神程序员巧克力式爱心键盘( 10 把)
  7. 小米路由(OpenWrt)折腾记(二)-- 搭建LLMP服务
  8. 如何用计算机算精馏塔理论板,精馏理论塔板计算软件
  9. Ubuntu 18 安装eclipse
  10. 记忆的助记器|如何使用联想记忆法