超简单的视频对象提取程序

视频对象提取

与其说是视频对象提取,不如说是视频颜色提取,因为其本质还是使用了OpenCV的HSV颜色物体检测。

HSV介绍

HSV分别代表,色调(H:hue),饱和度(S:saturation),亮度(V:value),由A. R. Smith在1978年创建的一种颜色空间, 也称六角锥体模型(Hexcone Model);

色调(H:hue):用角度度量,取值范围为0°~360°,从红色开始按逆时针方向计算,红色为0°,绿色为120°,蓝色为240°。它们的补色是:黄色为60°,青色为180°,品红为300°;(OpenCV中H的取值范围为0~180,8bit存储时);

饱和度(S:saturation):取值范围为0~255,值越大,颜色越饱和;

亮度(V:value):取值范围为0(黑色)~255(白色);

效果展示

实现思路

如上效果图所示,我们要做的就是把视频中的绿色的小猪佩奇识别出来即可,下面是的识别步骤:

  1. 使用PS取的小猪佩奇颜色的HSB值,相当于OpenCV的HSV,不过PS的HSV(HSB)取值是:0~360、0~1、0~1,而OpenCV的HSV是:0~180、0~255、0~255,所以要对ps的hsv进行处理,H/2、SV*255;
  2. 使用OpenCV位“与运算”提取HSV的颜色部分画面;
  3. 使用高斯模糊优化图片;
  4. 图片展示;

PS中工具栏右侧HSB显示:

完整代码

#coding=utf-8
#HSV转换(颜色提取)

import cv2
import numpy as np

cap = cv2.VideoCapture(0)

while (1):
    _, frame = cap.read()
    hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)

    #在PS里用取色器的HSV
    psHSV = [112, 89, 52]
    diff = 40  #上下浮动值
    #因为PS的HSV(HSB)取值是:0~360、0~1、0~1,而OpenCV的HSV是:0~180、0~255、0~255,所以要对ps的hsv进行处理,H/2、SV*255
    lowerHSV = [(psHSV[0] - diff) / 2, (psHSV[1] - diff) * 255 / 100,
                (psHSV[2] - diff) * 255 / 100]
    upperHSV = [(psHSV[0] + diff) / 2, (psHSV[1] + diff) * 255 / 100,
                (psHSV[2] + diff) * 255 / 100]

    mask = cv2.inRange(hsv, np.array(lowerHSV), np.array(upperHSV))

    #使用位“与运算”提取颜色部分
    res = cv2.bitwise_and(frame, frame, mask=mask)
    #使用高斯模式优化图片
    res = cv2.GaussianBlur(res, (5, 5), 1)

    cv2.imshow('frame', frame)
    # cv2.imshow('mask', mask)
    cv2.imshow('res', res)
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

cv2.destroyAllWindows()

原文地址:https://www.cnblogs.com/vipstone/p/9127383.html

时间: 2024-10-15 16:12:50

超简单的视频对象提取程序的相关文章

超简单MVC应用程序播放WMV视频

本篇博文,介绍给大家的是,在MVC应用程序中,播放Windows media video(.wmv) 视频文件. Insus.NET的实现方法,把media player组件,嵌入MVC的控制器的ContentResult的Action中即可.在本次的演示中,Insus.NET只是传入三个参数,视频的长与宽以及视频文件路径. 如果还想设置参其它参数,可以照此雷同即可. 参数可以直接在Action中设置,也可以是获取来自数据库,前提是你参数设置的程序,存储于数据库中. 第一步,建立控制器: 第二步

把C#程序(含多个Dll)合并成一个Exe的超简单方法

原文:把C#程序(含多个Dll)合并成一个Exe的超简单方法 开发程序的时候经常会引用一些第三方的DLL,然后编译生成的exe文件就不能脱离这些DLL独立运行了. 但是,很多时候我们本想开发一款只需要一个exe就能完美运行的小工具.那该怎么办呢? 下文介绍一种超简单的方法,不用写一行代码就可轻松实现. 这里我们需要用到一款名为Costura.Fody的工具.Costura.Fody是一个Fody框架下的插件,可通过Nuget安装到VS工程中.安装之后,就可以将项目所依赖的DLL(甚至PDB)文件

程序员,一起玩转GitHub版本控制,超简单入门教程 干货2

本GitHub教程旨在能够帮助大家快速入门学习使用GitHub,进行版本控制.帮助大家摆脱命令行工具,简单快速的使用GitHub. 做全栈攻城狮-写代码也要读书,爱全栈,更爱生活. 更多原创教程请关注头条号.每日更新.也可以添加小编微信:fullstackCourse.一起交流,获取最新全栈教程信息.因为FQ原因,不能下载客户端的同仁,可以关注后回复“GitHub客户端”获取安装软件. 上篇教程:GitHub这么火,程序员你不学学吗? 超简单入门教程 干货 GitHub概念部分出现了一丝纰漏.为

GitHub这么火,程序员你不学学吗? 超简单入门教程 【转载】

本GitHub教程旨在能够帮助大家快速入门学习使用GitHub. 本文章由做全栈攻城狮-写代码也要读书,爱全栈,更爱生活.原创.如有转载,请注明出处. GitHub是什么? GitHub首先是个分布式的版本控制库.通过使用git,可以方便的记录代码版本. 因国内外大量著名的项目,都开始搬迁到github.它又可以称为开源代码社区. github还是学习的好地方,学习优秀的代码. 可对其他项目中有bug的地方进行改进提交,集合众人的力量促进软件的优化改善. github何其火热,截至2015年2月

最简单的视频网站(JavaEE+FFmpeg)

本文记录一个最简单的视频网站系统.此前做过一些基于JavaEE中的SSH (Strut2 + Spring + Hibernate)的网站系统,但是一直没有做过一个视频网站系统,所以就打算做一个"精简"的视频网站系统,以方便以后测试以及学习使用.本视频网站支持直播(通过RTMP实现)和点播(通过HTTP实现).为了保持精简,这个视频网站系统仅制作了网络视频的管理功能(增删改查),以及相关的参数配置功能.由于自己在JavaEE方面没有深入学习过,所以这个系统有部分功能还没搞完,以后有时间

转:最简单的视频网站(JavaEE+FFmpeg)

本文记录一个最简单的视频网站系统.此前做过一些基于JavaEE中的 SSH (Strut2 + Spring + Hibernate)的网站系统,但是一直没有做过一个视频网站系统,所以就打算做一个"精简"的视频网站系统,以方便以后测试以及学习使用.本视频网站支持直播(通过RTMP实现)和点播(通过HTTP实现).为了保持精简,这个视频网站系统仅制作了网络视频的管理功能(增删改查),以及相关的参数配置功能.由于自己在JavaEE方面没有深入学习过,所以这个系统有部分功能还没搞完,以后有时

理解隐式类型、对象初始化程序和匿名类型

在C# 3.0中,几乎每个新特性都是为LINQ服务的.所以,本文将介绍下面几个在C# 3.0中引入的新特性: 自动实现的属性 隐式类型的局部变量 对象和集合初始化程序 隐式类型的数组 匿名类型 其实这几个特性都是比较容易理解的,对于这几个特性,编译器帮我们做了更多的事情(想想匿名方法和迭代器块),从而简化我们的代码. 自动实现的属性 在C# 3.0以前,当我们定义属性的时候,一般使用下面的代码 public class Book { private int _id; private string

打造支持apk下载和html5缓存的 IIS(配合一个超简单的android APP使用)具体解释

为什么要做这个看起来不靠谱的东西呢? 由于刚学android开发,还不能非常好的熟练控制android界面的编辑和操作,所以我的一个急着要的运用就改为html5版本号了,反正这个运用也是须要从server获取大量数据来展示在手机上面的,也就是说:必须联网,才干正常工作,于是想了一下,反正都要联网获取数据,为什么不直接用我相对熟悉一点的 html来做这个运用呢?省的花费不够用的时间去学习android界面的控制,于是就简单了:用蹩脚的手段做了一个android程序的启动欢迎界面,内页就是一个全屏的

Request —— 让 Node.js http请求变得超简单

先前一直比较关注前端的东西,对后端了解较少.不过一直对Node.js比较感兴趣,去年12月还去参加了阿里的CNODE交流聚会. 以后希望通过这里的博客分享一些学习Node.js的笔记.一方面总结了自己的学习心得,另一方面也可以和大家一起分享交流. 嗯,大概就是这样子. 这篇就先介绍一个Node.js的模块——request.有了这个模块,http请求变的超简单. 使用超简单 Request使用超简单,同时支持https和重定向. var request = require('request');