文章目录

  • 声明
  • 正文
  • 1.明确任务
  • 2.需要用到的函数
  • 3.完整代码
  • 4.另外
  • 感谢观看!


声明

声明:本系列博客是我在学习OpenCV官方教程中文版(For Python)(段力辉 译)所做的笔记。所以,其中的绝大部分内容引自这本书,博客中的代码也是其配套所附带的代码或书中的代码,侵删。其中部分代码可能会因需要而改动。在本系列博客中,其中包含书中的引用,也包括我自己对知识的理解,思考和总结。本系列博客的目的主要有两个,一个是可以作为我自己的学习笔记,时常复习巩固。第二个是可以为想学习python下的opencv 3 相关知识的朋友提供一些参考。

正文

1.明确任务

利用opencv知识,通过摄像头录像,实时提取带有某个特定颜色的物体,从而实现物体跟踪。

2.需要用到的函数

  • cv2.VideoCapture(0)
    这个函数用来捕获视频,VideoCapture()中参数是0,表示打开笔记本的内置摄像头,参数是视频文件路径则打开视频。,记得最后要用cap.release()来关闭摄像头。
  • ret,frame=cap.read()
    cap.read()按帧读取视频,ret,frame是cap.read()方法的两个返回值。其中ret是布尔值,如果读取帧是正确的则返回True,如果文件读取到结尾,它的返回值就为False。frame就是每一帧的图像,是个三维矩阵。
  • cv2.cvtColor(image,flag)
    这个函数是一个颜色空间转换函数,flag代表转换方式。
  • cv2.inRange()
    括号里有三个参数,依次是hsv,lower,upper,第一个参数:hsv指的是原图,第二个参数:lower指的是图像中低于这个lower的值,图像值变为0,第三个参数:upperd指的是图像中高于这个upper_red的值,图像值变为0,而在lower~upper之间的值变成255。
  • cv2.bitwise_and()
    bitwise_and()是对二进制数据进行“与”操作,即对图像(灰度图像或彩色图像均可)每个像素值进行二进制“与”操作,1&1=1,1&0=0,0&1=0,0&0=0

3.完整代码

import cv2
import numpy as np

cap=cv2.VideoCapture(0)
while(1):
# 获取每一帧
    ret,frame=cap.read()
# 转换到 HSV
    hsv=cv2.cvtColor(frame,cv2.COLOR_BGR2HSV)
# 设定颜色的阈值
    lower_red=np.array([0,43,46])
    upper_red=np.array([10,255,255])
# 根据阈值构建掩模
    mask=cv2.inRange(hsv,lower_red,upper_red)
# 对原图像和掩模进行位运算
    res=cv2.bitwise_and(frame,frame,mask=mask)
# 显示图像
    cv2.imshow('frame',frame)
    cv2.imshow('mask',mask)
    cv2.imshow('res',res)
    k=cv2.waitKey(5)&0xFF
    if k==27:
        break
cap.release()    #关闭摄像头
# 关闭窗口
cv2.destroyAllWindows()

运行结果:

android opencv跟踪 opencv物体追踪和定位_android opencv跟踪


android opencv跟踪 opencv物体追踪和定位_python_02


android opencv跟踪 opencv物体追踪和定位_opencv_03


(当时截图时没截好,所以原始图片与前两张不一样)

4.另外

怎样找到要跟踪对象的 HSV 值?
只需要以下代码就可以轻松获得你需要的HSV值:

import cv2
import numpy as np

#假设我们想得到绿色的HSV值
green=np.uint8([[[0,255,0]]])#注意:是RGB,而不是BGR,还有这里是三层括号
hsv_green=cv2.cvtColor(green,cv2.COLOR_BGR2HSV)
print(hsv_green)

运行结果:

[[[ 60 255 255]]]

得到这个值后,现在你可以分别用 [H-100,100,100] 和 [H+100,255,255] 做上下阈值。

感谢观看!

如有错误,欢迎批评指正!