(手势识别)基于opencv的手势识别框选(一)图像处理

基于opencv的手势识别框选(一)图像处理

程序

cap = cv2.VideoCapture(0)
while True:
    ret , img = cap.read() # 打开摄像头
    img = cv2.GaussianBlur(img, (5, 5), 0) # 高斯滤波
    ycrcb = cv2.cvtColor(img, cv2.COLOR_BGR2YCrCb)
    (y, cr, cb) = cv2.split(ycrcb)
    cr1 = cv2.GaussianBlur(cr, (5, 5), 0)  # 高斯滤波
    _, skin1 = cv2.threshold(cr1, 0, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU)  # OTSU图像二值化
    blur = cv2.GaussianBlur(skin1, (15, 15), 0)

获取图像

cap = cv2.VideoCapture(0)

videoCapture(0) 参数0表示调用笔记本内置摄像头

videoCapture(“c:\tmp\test.avi”) 参数路径表示调用存储的视频

此处VideoCapture()中参数是0,表示打开内置摄像头,在填入参数后指向文件路径打开视频

ret , img = cap.read()

cap.read第一位返回的是布尔值,即TURE和FALSE,确定的是采集到的每帧图像是否是正常的,img就是每帧采集到的图片,也就是后续函数的输入。

高斯处理

cv2.GaussianBlur(img, (5, 5), 0)

img为高斯处理的输入,(5,5)为高斯矩阵,对原图片进行卷积。0表示偏差为0

颜色阈值处理

opencv具有多种颜色阈值处理方式,包括YCrCb,HSV等等,这里采用YCrCb颜色空间法,其余以后再做介绍。

ycrcb = cv2.cvtColor(img, cv2.COLOR_BGR2YCrCb)

将img本身的RGB像素信息转变为YCrCb信息。

 Y  = 0.2990R + 0.5870G + 0.1140B
 Cr  = 0.5000R - 0.4187G - 0.0813B + 128
 Cb = -0.1687R - 0.3313G + 0.5000B + 128

(y, cr, cb) = cv2.split(ycrcb)

这一步进行的是图像颜色通道的分离,将Y,Cr,Cb信息分别储存起来,方便后续调用。

cv2.threshold(cr1, 0, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU)

接着进行的是OTSU二值化,这部分需要分为两个方式看待

 ret, dst = cv2.threshold(src, thresh, maxval, type)  #固定阈值二值化
 cv2.threshold(cr1, 0, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU) #基于直方图的阈值处理
  • src: 输入图,只能输入单通道图像,通常来说为灰度图
  • dst: 输出图
  • thresh: 阈值
  • maxval: 当像素值超过了阈值(或者小于阈值,根据type来决定),所赋予的值
  • type:二值化操作的类型,包含以下5种类型: cv2.THRESH_BINARY; cv2.THRESH_BINARY_INV; cv2.THRESH_TRUNC; cv2.THRESH_TOZERO;cv2.THRESH_TOZERO_INV

ps:后续补充图片,11.11.21.21

  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 7
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值