位置: IT常识 - 正文

10 OpenCV图像识别之人脸追踪(opencv图像识别特定形状)

编辑:rootadmin
10 OpenCV图像识别之人脸追踪 文章目录1 级联分类器2 人脸跟踪2.1 相关方法2.2 代码示例

推荐整理分享10 OpenCV图像识别之人脸追踪(opencv图像识别特定形状),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:opencv图像识别特定形状,opencv 图片识别,opencv图像识别特定形状,opencv图像识别教程,opencv图像识别有什么算法,opencv图像识别有什么算法,opencv图像识别有什么算法,opencv图像识别实例,内容如对您有帮助,希望把文章链接给更多的朋友!

CV2中内置了人脸识别等常用的算法,这类算法是通过级联分类器实现的。

1 级联分类器

级联分类器的核心思想是使用多个分类器级联,每个分类器负责检测不同的特征,逐步排除不可能是目标的区域,从而减少计算量和误检率,提高检测效率。级联分类器通常由多个弱分类器组成,这些弱分类器的输出被级联在一起形成强分类器,因此级联分类器也被称为“弱分类器的级联”。

在OpenCV中,级联分类器使用的Haar特征是一种基于矩形区域的特征,用于描述物体的边缘、角、线等。Adaboost算法用于训练分类器,它是一种迭代算法,每一轮迭代都会选出最优的特征和阈值进行分类器训练。

级联分类器在人脸检测等领域有着广泛的应用,因为它能够快速准确地识别目标,并且可以通过调整参数来平衡检测速度和准确度。但是,级联分类器也存在一些局限性,比如对于光照、姿态、遮挡等变化较大的情况,检测效果可能不理想。

级联分类器存储在cv2包下的data中: 每个分类器都针对特定的物体或场景进行了优化。以下是一些常用的级联分类器及其作用:

Haar人脸分类器(haarcascade_frontalface_default.xml):用于检测图像中的人脸,是OpenCV中最常用的级联分类器之一。Haar眼睛分类器(haarcascade_eye.xml):用于检测人脸中的眼睛。Haar上半身分类器(haarcascade_upperbody.xml):用于检测图像中的上半身,包括头、肩膀和胸部。Haar全身分类器(haarcascade_fullbody.xml):用于检测图像中的整个人体,包括头、肩膀、胸部、腰部、腿和脚。Haar汽车分类器(haarcascade_car.xml):用于检测图像中的汽车。Haar行人分类器(haarcascade_pedestrian.xml):用于检测图像中的行人,适用于行人检测和跟踪等场景。

除了以上列举的常用分类器,还有一些其他分类器,如针对摩托车、猫、狗、手部、火焰等物体或场景的分类器。值得注意的是,这些分类器都是基于Haar特征和Adaboost算法构建的,因此对于复杂场景或要检测的物体形态较为复杂的情况,可能需要使用其他类型的物体检测算法或自行训练分类器来获得更好的检测效果。

2 人脸跟踪2.1 相关方法10 OpenCV图像识别之人脸追踪(opencv图像识别特定形状)

在CV2中,涉及的操作分别为导入分类器(CascadeClassifier方法)与使用分类器(分类器下的detectMultiScale方法)。 其中导入方法比较简单:

cascade = cv2.CascadeClassifier("xml文件路径")

导入后使用分类器的detectMultiScale方法进行图像识别:

objects = cascade.detectMultiScale(image, scaleFactor=1.1, minNeighbors=3, flags=0, minSize=None, maxSize=None)

其中,cascade是cv2.CascadeClassifier对象,image是要检测的图像。该方法返回一个由检测到的物体的矩形框组成的numpy数组。

其他可选参数解释如下:

scaleFactor:每次图像缩小的比例。默认为1.1,即每次图像缩小10%。minNeighbors:控制误检测率的阈值。默认为3,表示每个候选矩形框周围至少需要有3个相邻的矩形框才能被认为是真正的矩形框。flags:用于控制级联分类器的行为。可以是以下值之一:

cv2.CASCADE_SCALE_IMAGE:缩放图像以适应每个尺度。cv2.CASCADE_DO_ROUGH_SEARCH:使用粗略的搜索模式。cv2.CASCADE_FIND_BIGGEST_OBJECT:只返回最大的物体。cv2.CASCADE_DO_CANNY_PRUNING:使用Canny边缘检测器进行物体检测。cv2.CASCADE_DO_MEDIAN_BLUR:对图像进行中值模糊处理。minSize:指定检测到的物体的最小尺寸,可以是元组或列表。默认为None,表示没有最小尺寸限制。maxSize:指定检测到的物体的最大尺寸,可以是元组或列表。默认为None,表示没有最大尺寸限制。

detectMultiScale方法返回的矩形框是一个numpy数组,每行对应一个检测到的物体,四列分别表示矩形框的x坐标、y坐标、宽度和高度。可以使用循环遍历该数组,对图像中检测到的物体进行进一步处理,例如在物体周围画一个矩形框,或者将其提取出来用于后续处理。

2.2 代码示例import cv2img = cv2.imread("zuiguifanju.jpg") # 加载识别人脸的级联分类器 faceCascade = cv2.CascadeClassifier(r"D:\Python\Anaconda3\lib\site-packages\cv2\data\haarcascade_frontalface_default.xml") faces = faceCascade.detectMultiScale(img, maxSize=[100,100]) # 识别出所有人脸,最大不超过100*100(提升识别准确率) for (x, y, w, h) in faces: # 遍历人脸区 cv2.rectangle(img, (x, y), (x + w, y + h), (0, 0, 255), 5) cv2.imshow("img", img) cv2.waitKey() cv2.destroyAllWindows()

同时,可以给大佬们带上个帅气的墨镜:

import cv2# 覆盖图像 def overlay_img(img, img_over, img_over_x, img_over_y): """ 覆盖图像 :param img: 背景图像 :param img_over: 覆盖的图像 :param img_over_x: 覆盖图像在背景图像上的横坐标 :param img_over_y: 覆盖图像在背景图像上的纵坐标 :return: 两张图像合并之后的图像 """ img_h, img_w, img_p = img.shape # 背景图像宽、高、通道数 img_over_h, img_over_w, img_over_c = img_over.shape # 覆盖图像高、宽、通道数 if img_over_c == 3: # 通道数小于等于3,则转换成4通道图像 img_over = cv2.cvtColor(img_over, cv2.COLOR_BGR2BGRA) for w in range(0, img_over_w): for h in range(0, img_over_h): if img_over[h, w, 3] != 0: # 如果不是透明的像素 print(img_over[h, w, 3]) for c in range(0, 3): x = img_over_x + w y = img_over_y + h if x >= img_w or y >= img_h: # 如果坐标超出最大宽高则不画 break alpha = img_over[h, w, 3] / 255.0 # 计算alpha通道值 img[y, x, c] = alpha * img_over[h, w, c] /+ (1 - alpha) * img[y, x, c] # 覆盖像素 return img face_img = cv2.imread("zuiguifanju.jpg") glass_img = cv2.imread("glass.png", cv2.IMREAD_UNCHANGED) height, width, channel = glass_img.shape # 加载级联分类器 face_cascade = cv2.CascadeClassifier(r"D:\Python\Anaconda3\lib\site-packages\cv2\data\haarcascade_frontalface_default.xml") faces = face_cascade.detectMultiScale(face_img, maxSize=[100,100]) # 识别人脸 for (x, y, w, h) in faces: gw = w # 眼镜缩放之后的宽度 gh = int(height * w / width) # 眼镜缩放之后的高度度 glass_img = cv2.resize(glass_img, (gw, gh)) # 按照人脸大小缩放眼镜 overlay_img(face_img, glass_img, x, y + int(h * 1 / 3)) # 将眼镜绘制到人脸cv2.imshow("screen", face_img) cv2.waitKey() cv2.destroyAllWindows()

上面的代码主要思路是利用一个自定义函数overlay_img来实现图像的覆盖,函数的输入参数是背景图像img,覆盖的图像img_over,以及img_over在img中的坐标img_over_x和img_over_y。函数的返回值是两张图像合并之后的图像。

在函数内部,首先获取背景图像和覆盖图像的宽、高、通道数。如果覆盖图像的通道数小于等于3,就将其转换成4通道图像。然后遍历覆盖图像的所有像素,如果当前像素不是透明像素(alpha通道不为0),就计算alpha通道值,然后根据该值对覆盖像素和背景像素进行加权求和,得到最终的像素值。

在主程序中,首先读取人脸图像和眼镜图像,并使用级联分类器检测人脸。然后遍历所有人脸的区域,按照人脸大小缩放眼镜图片,并调用overlay_img函数将眼镜图片覆盖在人脸图片上。最后显示最终处理的效果。

本文链接地址:https://www.jiuchutong.com/zhishi/300656.html 转载请保留说明!

上一篇:Redux的基本使用过程详解(redux入门教程)

下一篇:【论文笔记】CycleGAN(基于PyTorch框架)(毕业论文笔记怎么写)

  • 推广淘宝店商业策划书(给淘宝商家做推广)

    推广淘宝店商业策划书(给淘宝商家做推广)

  • 真我q3s怎么设置隐私替身(真我Q3s怎么设置隐藏相册)

    真我q3s怎么设置隐私替身(真我Q3s怎么设置隐藏相册)

  • iOS15支持分屏吗(ios15可以分屏么)

    iOS15支持分屏吗(ios15可以分屏么)

  • 腾讯会员续费取消方法(续费的腾讯会员怎么取消)

    腾讯会员续费取消方法(续费的腾讯会员怎么取消)

  • 华为荣耀8手机机身有多重(华为荣耀8手机,耳机好的但是插了还是外放)

    华为荣耀8手机机身有多重(华为荣耀8手机,耳机好的但是插了还是外放)

  • 戴尔g3一键强冷哪个键(戴尔g3强冷模式)

    戴尔g3一键强冷哪个键(戴尔g3强冷模式)

  • wps邮件合并没有合并规则吗(wps邮件合并没有规则怎么办)

    wps邮件合并没有合并规则吗(wps邮件合并没有规则怎么办)

  • 美图秀秀怎么给图片换背景(美图秀秀怎么给视频添加音乐)

    美图秀秀怎么给图片换背景(美图秀秀怎么给视频添加音乐)

  • 华为nova7带耳机不(华为nova7带耳机吗)

    华为nova7带耳机不(华为nova7带耳机吗)

  • 华为nova6闪存规格(华为nova65g闪存是ufs3.0吗)

    华为nova6闪存规格(华为nova65g闪存是ufs3.0吗)

  • 电脑没有声音是什么原因造成的(电脑没有声音是哪根线插错了)

    电脑没有声音是什么原因造成的(电脑没有声音是哪根线插错了)

  • al10荣耀是什么型号(荣耀al10华为是什么型号)

    al10荣耀是什么型号(荣耀al10华为是什么型号)

  • dos常见命令(dos常用基本命令)

    dos常见命令(dos常用基本命令)

  • 红外灯不亮能修理吗(红外线灯不亮了)

    红外灯不亮能修理吗(红外线灯不亮了)

  • 宿舍网络差怎么解决(宿舍网络差怎么弄)

    宿舍网络差怎么解决(宿舍网络差怎么弄)

  • 华为p30pro取卡是哪一个孔(华为p30pro取卡怎么取卡)

    华为p30pro取卡是哪一个孔(华为p30pro取卡怎么取卡)

  • 710和730g性能差多少(710跟730)

    710和730g性能差多少(710跟730)

  • 腾讯大王卡腾讯课堂免流吗(腾讯大王卡腾讯会员怎么领取)

    腾讯大王卡腾讯课堂免流吗(腾讯大王卡腾讯会员怎么领取)

  • qq亲密关系解除了 亲密度还在吗(qq亲密关系解除多久可以建立新关系)

    qq亲密关系解除了 亲密度还在吗(qq亲密关系解除多久可以建立新关系)

  • ipad一共有几个尺寸(ipad一共有几个型号,性能排行)

    ipad一共有几个尺寸(ipad一共有几个型号,性能排行)

  • pe-windows是什么(PE-Windows是什么)

    pe-windows是什么(PE-Windows是什么)

  • 华为mate30pro5g什么时候预售(华为mate30pro5g什么屏幕)

    华为mate30pro5g什么时候预售(华为mate30pro5g什么屏幕)

  • 计算器开机键是哪个键(计算器开机键是NC吗)

    计算器开机键是哪个键(计算器开机键是NC吗)

  • vue能否添加滚动字幕(vue实现滚动条)

    vue能否添加滚动字幕(vue实现滚动条)

  • rohs是什么牌子(rohs是什么牌子主板)

    rohs是什么牌子(rohs是什么牌子主板)

  • 华为mate30屏幕刷新率(华为mate30屏幕刷新率在哪里)

    华为mate30屏幕刷新率(华为mate30屏幕刷新率在哪里)

  • 小米小爱音箱怎么连接蓝牙(小米小爱音箱怎么连接wifi)

    小米小爱音箱怎么连接蓝牙(小米小爱音箱怎么连接wifi)

  • 小米9充电线是哪种(小米9充电器数据线)

    小米9充电线是哪种(小米9充电器数据线)

  • 淘金币怎么换种子(淘金币怎么换钱)

    淘金币怎么换种子(淘金币怎么换钱)

  • 高新技术生物企业是否可减按15%的税率纳税?
  • 手机个人所得税app下载官网
  • 支付境外劳务费需要缴纳哪些税费
  • 什么是免税合并
  • 百旺税控盘自己用不了
  • 什么是未投入使用的固定资产
  • 资产负债表应交税金负数是什么意思
  • 核定征收企业如何纳税
  • 房产公司要交房产税吗
  • 债权投资损失准备
  • 工程项目劳务分包合同范本
  • 个人取得的拆迁款需要缴纳个人所得税吗
  • 借款合同 增值税
  • 企业所得所得税税负
  • 企业偷税漏税行为诉讼有效期限
  • 试运营和正式运营间隔
  • 票开了但是没有发票
  • 固定资产入账会计
  • 设备维保服务费会计分录
  • 销项税和进项税怎么区分
  • 收到分包公司工程发票收入怎么做账
  • 少计提的地税怎么做分录
  • 发放福利视同销售进项税要转出吗?
  • 支付工伤赔偿款怎么做账
  • win10更新kb5005033
  • mac os右键
  • 补缴房产税土地使用税怎么算
  • codelite怎么进行编译
  • 场地租赁费需要计提吗
  • javascript生成器
  • 发票点击了打印,然后怎么修改
  • php怎么设置图片的大小
  • java pdf生成工具
  • 增值税代扣代缴税率是多少
  • vue移动
  • sockas
  • 创建数据的命令是
  • 售后租回交易的资产销售价低于市场价承租人作为
  • 跨区域涉税事项报验管理编号怎么填
  • 进项税额已抵扣转出会计分录
  • 主营业务收入登记明细账簿范本
  • php验证码代码怎么写
  • 税盘抵扣怎么做分录
  • 减免增值税的账务处理是什么
  • sql server 实现数据值加一减一
  • sql server存储过程写法
  • 退伍军人9000补助
  • 机会成本的特点有()
  • 公司买车可以抵扣企业所得税吗
  • 现金折扣方式销售货物不得从计税销售额中扣减折扣额
  • 本票汇票支票的区别表格
  • 实际费用以什么为准
  • 增值税年末结转的会计处理
  • 人力公司开的代驾发票
  • 用于研发购买的材料进项税额
  • 税控盘服务费会计科目
  • 赞助费入账需要多久
  • 普通发票记账联盖章了怎么办
  • 建筑企业营改增之前计税方法
  • 公司转让无形资产开什么票
  • 库存商品账本填写样本
  • 数据库mysql索引
  • mysql存储过程判断输入判断类型
  • ie11安装方法
  • window 启动
  • ghost操作指南
  • win10日历提醒不显示
  • win7开机提示重启怎么办
  • win8怎么清空电脑只剩系统
  • 页面模板排序
  • python语言怎么用
  • unity3d制作ui
  • jquery放在head还是body
  • python 开源ide
  • jquery的validate前端表单验证
  • js布局与css布局
  • shell bash sh
  • 山东农村土地补贴每亩多少
  • 国税地税数据共多少
  • 郑州金水区税务大厅电话
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设