肃宁做网站价格,广州市增城区建设局网站是什么,wordpress修改链接出现404,wordpress 获取作者名一、学习目标
了解为什么色彩空间的转换那么重要了解opencv中进行对象跟踪的方法
目录
[python opencv 计算机视觉零基础到实战] 一、opencv的helloworld
[【python opencv 计算机视觉零基础到实战】二、 opencv文件格式与摄像头读取] 一、opencv的helloworld
[[python op…一、学习目标
了解为什么色彩空间的转换那么重要了解opencv中进行对象跟踪的方法
目录
[python opencv 计算机视觉零基础到实战] 一、opencv的helloworld
[【python opencv 计算机视觉零基础到实战】二、 opencv文件格式与摄像头读取] 一、opencv的helloworld
[[python opencv 计算机视觉零基础到实战] 三、numpy与图像编辑] 一、opencv的helloworld
[[python opencv 计算机视觉零基础到实战] 四、了解色彩空间及其详解] 一、opencv的helloworld
[[python opencv 计算机视觉零基础到实战] 五、对象追踪] 一、opencv的helloworld 如有错误欢迎指出~
二、了解OpenCV中使用inRange进行对象跟踪
2.1 了解色彩空间的转换为什么那么重要
上一节中我们了解了色彩空间的转换那为什么要了解色彩空间上一节中并没有进行说明这一节将通过色彩空间的转换使我们能够对一些对象进行追踪这一节所需要转换的色彩空间是HSV色彩空间在HSV色彩空间中不同的颜色有不同的取值范围通过这些范围可以对一些指定颜色进行过滤捕获从而实现跟踪。
首先我们查看一下HSV色彩空间中一般颜色的取值范围。HSV存在3个通道我们以下为黑白灰、红橙黄绿青蓝紫颜色的三个通道取值范围我们了解了取值范围后将有利于我们对这些颜色的取值 黑
H低值为 0S低值为 0V低值为 0H高值为 180S高值为 255V高值为 46
白
H低值为 0S低值为 0V低值为 221H高值为 180S高值为 30V高值为 255
灰
H低值为 0S低值为 0V低值为 46H高值为 180S高值为 43V高值为 220
红
H低值为 156S低值为 43V低值为 46H高值为 180S高值为 255V高值为 255
橙
H低值为 11S低值为 43V低值为 46H高值为 25S高值为 255V高值为 255
黄
H低值为 26S低值为 43V低值为 46H高值为 34S高值为 255V高值为 255
绿
H低值为 35S低值为 43V低值为 46H高值为 77S高值为 255V高值为 255
青
H低值为 78S低值为 43V低值为 46H高值为 99S高值为 255V高值为 255
蓝
H低值为 100S低值为 43V低值为 46H高值为 124S高值为 255V高值为 255
紫
H低值为 125S低值为 43V低值为 46H高值为 155S高值为 255V高值为 255
我们可以根据以上的值使用inRange方法对图片的对象进行过滤或者说跟踪如果使用以上的颜色取值范围有个先行条件需要对图片进行HSV转换。
2.2 使用inRange对图像进行捕获
在python中使用inRange方法可以对图片进行过滤从而捕获我们需要捕获的内容。inRange方法需要传入3个参数第一个是图像第二个是一个下限这个下限指你需要捕获的目标颜色的取值低值第三个是一个上限指你需要捕获的目标颜色取值上限值。下限与上限都是数组。
现在我们有如下图片 以上图片共有3中颜色白色、黑色、绿色。现在我需要捕获黑色那该如何去做呢 这时我们通过2.1节中得知黑色的H、S、V低值分别是0、0、0高值分别是180、255、46。我们创建两个数值一个存储低值一个存储高值。代码如下
minnp.array([0,0,0])
maxnp.array([180,255,46])这时我们先获取图片并且引入numpy不然np未引入将会出错
import cv2
import numpy as npimg cv2.imread(rC:\Users\mx\Desktop\test.jpg)
cv2.namedWindow(Image,cv2.WINDOW_NORMAL)
cv2.namedWindow(flag,cv2.WINDOW_NORMAL)以上代码创建的Image窗口用于显示正常的图片flag窗口显示我们捕获后的目标图片。随后将图片进行HSV转换
hsv_imgcv2.cvtColor(img,cv2.COLOR_BGR2HSV)随后将创建的数组以及将转换后的图片传入inRange方法中
minnp.array([0,0,0])
maxnp.array([180,255,46])
flagcv2.inRange(hsv_img,lowerbmin,upperbmax)接着显示以及等待
cv2.imshow(Image, img)
cv2.imshow(flag, mask)
cv2.waitKey (0)
cv2.destroyAllWindows()为了方便大家查看以下贴出了完整代码
import cv2
import numpy as npimg cv2.imread(rC:\Users\mx\Desktop\test.jpg)
cv2.namedWindow(Image,cv2.WINDOW_NORMAL)
cv2.namedWindow(flag,cv2.WINDOW_NORMAL)hsv_imgcv2.cvtColor(img,cv2.COLOR_BGR2HSV)
minnp.array([0,0,0])
maxnp.array([180,255,46])
flagcv2.inRange(hsv_img,lowerbmin,upperbmax)cv2.imshow(Image, img)
cv2.imshow(flag, flag)
cv2.waitKey (0)
cv2.destroyAllWindows()运行结果如下 我们从运行后的结果中发现我们需要捕获的黑色变成了白色显示其它颜色则变成了黑色。那我们接着将捕获的黑色换成绿色。那么我们更改低值与高值数组改成绿色的低值为 35、43、46高值77、 255、 255
minnp.array([35,43,46])
maxnp.array([77,255,255])运行代码结果如下
这个时候绿色捕获成功其它颜色编程了黑色或者说都为0。
2.3 使用inRange对视频中目标进行捕获
在前两篇文章中我们已经了解了如何读取视频设备流那如何读取视频呢其实流程是一样的我们首先创建VideoCapture并且传入视频路径获取视频对象。
capturecv2.VideoCapture(rC:\Users\mx\Desktop\hmbb.mp4)随后循环使用read方法读取视频类似方法不再进行赘述
while True:r,imgcapture.read()if rFalse:break那么接下来就开始等待与显示了。我们每一帧视频都是一张图片那么只要不断的在一个窗口中显示图片就可以了添加完显示代码后完整代码如下
import cv2
import numpy as npcapturecv2.VideoCapture(rC:\Users\mx\Desktop\hmbb.mp4)while True:r,imgcapture.read()if rFalse:breakcv2.imshow(hmbb, img)kcv2.waitKey (40)if k27:break
cv2.destroyAllWindows()这个时候运行代码成功的播放视频
我在这里使用的是海绵宝宝我们接下来捕获跟踪视频中的海绵宝宝对象。海绵宝宝是一个类似于黄色的物体那么我们只需要创建两个数组用于捕捉黄色图像即可其它代码跟图片捕捉的代码一致不再赘述完整代码如下
import cv2
import numpy as npcapturecv2.VideoCapture(rC:\Users\mx\Desktop\hmbb.mp4)
minnp.array([26,43,46])
maxnp.array([34,255,255])
while True:r,imgcapture.read()if rFalse:breakhsv_imgcv2.cvtColor(img,cv2.COLOR_BGR2HSV)flagcv2.inRange(hsv_img,lowerbmin,upperbmax)cv2.imshow(flag, flag)cv2.imshow(hmbb, img)kcv2.waitKey (40)if k27:break
cv2.destroyAllWindows()运行结果如下
当我们运行代码后出现两个窗口有一个窗口将对视频进行捕获内容并且很好的捕获到了视频中的海绵宝宝。
该系列文章首发于易百纳。
三、总结
了解通过图片转换色彩空间HSV从而对目标颜色从相片中进行捕获了解常规颜色的取值范围并且了解了inRange方法的使用传入值范围和图片即可对目标颜色物体进行跟踪