opencv---颜色空间转化并实现物体跟踪
一、图像处理的基本操作
因为这是第一篇写opencv的笔记,故先讲讲在python下写opencv的基本操作。总共总结了三点如下:
- 开头一定要加编码声明:-*- coding: utf-8 -*-
- python下记得引入opencv模块:import cv2
- 要知道如何读取并展示图片,代码如下:
# -*- coding: utf-8 -*-
import cv2
import numpy as np
name1=cv2.imread(图片名称,如何读取)#读取图片
cv2.imshow(窗口名字,name1)#展示图片
cv2.waitKey()#这是一个键盘绑定函数,只需记到在cv2.imshow后一定要加上这句.
cv2.destoryAllWindows()
二、颜色空间转化
当我们读取完一张图片,一般情况下它都是BGR模式。那么什么是BGR模式呢?总所周知,色彩中不能再分解的基本色称之为原色,原色可以合成其他的颜色,而其他颜色却不能还原出本来的色彩。我们通常说光的三原色,即红、绿、蓝,它们按不同比例的相互混合是可以变成其他所有颜色。不知道你们用过Photoshop没有,里面的调色板就是依靠这个BGR原理。
白色:RGB(255,255,255)
黑色:RGB(0,0,0)
红色:RGB(255,0,0)
绿色:RGB(0,255,0)
蓝色:RGB(0,0,255)
青色:RGB(0,255,255)
紫色:RGB(255,0,255)
当然颜色模式不止只有BGR一种,在这里我再向大家介绍一种模式,它叫HSV。咋一听,大家是不是以为是在讲病毒呢?哈哈,这只是恰巧重名而已,大家莫慌。HSV(Hue,Saturation,Value)是根据颜色的直观特性由A.R.Smith在1978年创建的一种颜色空间,也称六角锥体模型。这个模型中颜色的参数分别是:色调(H),饱和度(S),亮度(V)。HSV对用户来说是一种直观的颜色模型,它与BGR模式有很大的不同。Photoshop也有相似的模式,如下图所示;
色调:用角度度量,取值范围为0°~360°,从红色开始按逆时针方向计算,红色为0°,绿色为120°,蓝色为240°。它们的补色是:黄色为60°,青色为180°,品红为300°;
饱和度:取值范围为0.0~1.0,值越大,颜色越饱和;
亮度:取值范围为0(黑色)~255(白色);
现在向大家介绍一种使颜色模式转化的函数,cv2.cvtColor(input_image,flag)其中第一个参数是目标图片,第二个参数是转化类型,如cv2.COLOR_BGR2GRAY、cv2.COLOR_BGR2HSV.下面这段代码是将一个名为"1,jpg"的图片改为HSV模式.
# -*- coding: utf-8 -*-
import cv2
import numpy as np
a=cv2.imread('1.jpg')#读取一张图片
b=cv2.cvtColor(a,cv2.COLOR_BGR2HSV)#转化为HSV
三、物体跟踪
在我们将一幅图从BGR模式改为HSV后,我们就可以利用这一点来提取带有特定颜色的物体,这是因为在HSV颜色空间中要比在BGR空间中更容易表示一个特定颜色。
# -*- coding: utf-8 -*-
import cv2
import numpy as np
a=cv2.imread('2.jpg')#读取一张图片
b=cv2.cvtColor(a,cv2.COLOR_BGR2HSV)#转化为HSV
lower_blue=np.array([110,50,50])
upper_blue=np.array([130,255,255])#设定蓝色的阈值
mask=cv2.inRange(b,lower_blue,upper_blue)#根据阈值构建掩摸
res=cv2.bitwise_and(b,b,mask=mask)# 对原图像和掩模进行位运算
cv2.imshow('mask',mask)
cv2.imshow('b',b)
cv2.imshow('first',a)
cv2.waitKey()
cv2.destoryAllWindows()
opencv---颜色空间转化并实现物体跟踪的更多相关文章
- (4)opencv在android平台上实现 物体跟踪
最近项目时间很紧,抓紧时间集中精力去研究android平台的opencv里的物体跟踪技术 其他几篇文章有时间再去完善吧 从网上找到了一些实例代码,我想采取的学习方法是研究实例代码和看教程相结合,教程是 ...
- 基于粒子滤波的物体跟踪 Particle Filter Object Tracking
Video来源地址 一直都觉得粒子滤波是个挺牛的东西,每次试图看文献都被复杂的数学符号搞得看不下去.一个偶然的机会发现了Rob Hess(http://web.engr.oregonstate.edu ...
- 【图像处理】openCV光流法追踪运动物体
openCV光流法追踪运动物体 email:chentravelling@163.com 一.光流简单介绍 摘自:zouxy09 光流的概念是Gibson在1950年首先提出来的.它是空间运动物体在观 ...
- OpenCV 使用光流法检测物体运动
OpenCV 可以使用光流法检测物体运动,贴上代码以及效果. // opticalflow.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" ...
- Emgu-WPF 激光雷达研究-移动物体跟踪2
原文:Emgu-WPF 激光雷达研究-移动物体跟踪2 初步实现了去燥跟踪,并用圆点标注障碍物 https://blog.csdn.net/u013224722/article/details/8078 ...
- Emgu-WPF 激光雷达研究-移动物体跟踪
原文:Emgu-WPF 激光雷达研究-移动物体跟踪 接前两篇博客: 激光雷达数据解析并绘制雷达图 https://blog.csdn.net/u013224722/article/details/80 ...
- HMS Core AR Engine 2D图片/3D物体跟踪技术 助力打造更智能AR交互体验
AR技术已经被广泛应用于营销.教育.游戏.展览等场景.通过2D图像跟踪技术和3D物体跟踪技术,用户只需使用一台手机进行拍摄,即可实现海报.卡牌等平面物体以及文物.手办等立体物体的AR效果.尽管近年来2 ...
- OpenCV 3.2 Tracking 物体跟踪
跟踪就是在连续视频帧中定位物体,通常的跟踪算法包括以下几类: 1. Dense Optical Flow 稠密光流 2. Sparse Optical Flow 稀疏光流 最典型的如KLT算法(Kan ...
- opencv学习之旅_绘制跟踪轨迹
如何将运动物体的轨迹画出来 我的想法是先:用CAMSHIFT跟踪物体,这个函数会返回一个track_box,将box的中心提取出来,然后以这个中心在另外的图像上画出来,然后将这张图像处理,提取轮廓,提 ...
随机推荐
- SAP HANA学习笔记
SAP HANA:High-Performance Analytic ApplianceSAP HANA XSC:Extended Application Services Classic(SAP推出 ...
- java里mongodb复合查询
Query query = new Query();Criteria criteria = Criteria.where("packetTitle").is(redPacketSt ...
- [安洵杯 2019]easy_serialize_php
0x00 知识点 PHP反序列化的对象逃逸 任何具有一定结构的数据,只要经过了某些处理而把自身结构改变,则可能会产生漏洞. 参考链接: https://blog.csdn.net/a3320315/a ...
- POJ - 1631 Bridging signals(最长上升子序列---LIS)
题意:左右各n个端口,已知n组线路,要求切除最少的线路,使剩下的线路各不相交,按照左端口递增的顺序输入. 分析: 1.设左端口为l,右端口为r,因为左端口递增输入,l[i] < l[j](i & ...
- 【php】Swoole之php高性能通信框架
Swoole介绍 swoole是由c语言开发的异步网络通信引擎,被编译为so文件(swoole.so)作为php的extesion扩展. 与其他普通扩展不同: 与普通的扩展不同的是普通的扩展只是提供一 ...
- 新iPhone的高售价下,苹果供应商们是该笑还是该哭?
自新 iPhone发布之日起,世界就从未停止讨论其售价,越来越多的人开始困惑:新 iPhone毫无创新亮点,有什么底气卖到12799RMB呢?整个地球都在期待苹果推出廉价版 iPhone,望眼欲穿地等 ...
- nginx如何一个域名多个端口?
方法一 写三个 listen server { listen 80; listen 81; listen 82; server_name www.sifou.com; ... 方法二 写三个serve ...
- Linux--Shell基本运算符
参考:http://www.runoob.com/linux/linux-shell-basic-operators.html
- JavaSE--for each
参考:http://blog.csdn.net/yasi_xi/article/details/25482173 学习多线程的时候实例化线程数组而挖掘出来的一直以来的理解误区 之前一直以为for ea ...
- main函数的参数(int argc,char *argv[])
一般的main函数都是不带参数的,因此main 后的括号都是空括号.实际上,main函数可以带参数,这个参数可以认为是 main函数的形式参数.C语言规定main函数的参数只能有两个, 习惯上这两个参 ...