OpenCV学习笔记(5)——颜色空间转换
- 学习如歌对图像进行颜色空间转换,从BGR到灰度图,或者从BGR到HSV等
- 创建一个程序用来从一幅图像中获取某个特定颜色的物体
1.转换颜色空间
OpenCV中有超过150种进行颜色空间转化的方法,但是实际上经常用到的也就两种:BGR<->Gray,BGR<->HSV
要用的函数是cv2.cvtColor(input_img,flag)flag就是转换类型
cv2.COLOR_BGR2GRAY 就是BGR<->Gray转换
cv2.COLOR_BGR2HSV 就是BGR<->HSV的转化
(介绍一下HSV格式,H指色彩/色度,取值[0,179],S是饱和度[0,255],V是亮度[0,255]。不同软件使用的值可能不同,所以当需要拿OpenCV的HSV值与别的软件的HSV值进行对比时要注意归一化)
也可以用一下代码获得所有可用的flag
import cv2
flags = [i for i in dir(cv2) if i.startswith('COLOR_')]
print(flags)
2.实现物体的跟踪
在知道如何将BGR转换到HSV后,就可以利用这一点来提取带有某个特定颜色的物体。在HSV的颜色空间中要比BGR空间中个更容易表示某一个特定颜色。我们先尝试提取一个蓝色的物体,步骤如下:
- 从视频中获取每一帧图像
- 将图像转化到HSV空间
- 设置HSV阈值到蓝色范围
- 获取蓝色物体,还可以做更多的事
代码如下:
# -*- coding:utf-8 -*- import numpy as np
import cv2 cap = cv2.VideoCapture(0) while True:
ret,frame = cap.read() hsv = cv2.cvtColor(frame,cv2.COLOR_BGR2HSV) #设置蓝色阈值范围
lower_blue = np.array([110,50,50])
upper_blue = np.array([130,255,255]) #根据阈值构建掩码
mask = cv2.inRange(hsv,lower_blue,upper_blue) #对原图像和掩码进行AND运算
res = cv2.bitwise_and(frame,frame,mask = mask) #显示图像
cv2.imshow('frame',frame)
cv2.imshow('mask',mask)
cv2.imshow('res',res)
k = cv2.waitKey(5)
if k == 27:
break cv2.destroyAllWindows()
3. 怎么找到想要的颜色的阈值范围
其实就是巧妙利用cvtColor这个函数。比如要找一个绿色的HSV值:
import numpy as np
import cv2 #先创建的一个绿色的像素点,注意此时是BGR
green = np.uint8([[[0,255,0]]])#这里必须用三层括号,对应图像矩阵,图像行,像素点BGR值 #然后用函数转换即可获得想要的阈值
hsv_green = cv2.cvtColor(green,cv2.COLOR_BGR2HSV)
print( hsv_green)
#然后使用上下浮动一个范围(如100)来作为上下阈值
OpenCV学习笔记(5)——颜色空间转换的更多相关文章
- OpenCV学习笔记(9)——形态学转换
不同的形态学操作,例如腐蚀,膨胀,开运算,闭运算等 形态学操作是根据图像形状进行的简单操作.一般情况下对二值化图像进行操作.需要的参数有两个,一个是原始图像,第二个被称为结构化元素或核,它是用来决定操 ...
- opencv学习笔记(七)SVM+HOG
opencv学习笔记(七)SVM+HOG 一.简介 方向梯度直方图(Histogram of Oriented Gradient,HOG)特征是一种在计算机视觉和图像处理中用来进行物体检测的特征描述子 ...
- opencv学习笔记(六)直方图比较图片相似度
opencv学习笔记(六)直方图比较图片相似度 opencv提供了API来比较图片的相似程度,使我们很简单的就能对2个图片进行比较,这就是直方图的比较,直方图英文是histogram, 原理就是就是将 ...
- opencv学习笔记(三)基本数据类型
opencv学习笔记(三)基本数据类型 类:DataType 将C++数据类型转换为对应的opencv数据类型 OpenCV原始数据类型的特征模版.OpenCV的原始数据类型包括unsigned ch ...
- opencv学习笔记(一)IplImage, CvMat, Mat 的关系
opencv学习笔记(一)IplImage, CvMat, Mat 的关系 opencv中常见的与图像操作有关的数据容器有Mat,cvMat和IplImage,这三种类型都可以代表和显示图像,但是,M ...
- OpenCV 学习笔记03 boundingRect、minAreaRect、minEnclosingCircle、boxPoints、int0、circle、rectangle函数的用法
函数中的代码是部分代码,详细代码在最后 1 cv2.boundingRect 作用:矩形边框(boundingRect),用于计算图像一系列点的外部矩形边界. cv2.boundingRect(arr ...
- OpenCV 学习笔记03 边界框、最小矩形区域和最小闭圆的轮廓
本节代码使用的opencv-python 4.0.1,numpy 1.15.4 + mkl 使用图片为 Mjolnir_Round_Car_Magnet_300x300.jpg 代码如下: impor ...
- OpenCV 学习笔记 02 使用opencv处理图像
1 不同色彩空间的转换 opencv 中有数百种关于不同色彩空间的转换方法,但常用的有三种色彩空间:灰度.BRG.HSV(Hue-Saturation-Value) 灰度 - 灰度色彩空间是通过去除彩 ...
- OpenCV学习笔记5
OpenCV学习笔记5 图像变换 傅里叶变换 这里可以先学习一下卷积分,了解清除卷积的过程和实际意义,在看这一章节的内容. 原理: 傅里叶变换经常被用来分析不同滤波器的频率特性.我们可以使用 2D 离 ...
随机推荐
- MySQL快速清空表数据
truncate table 可以不删除表的情况下,快速情况表数据
- PAT Basic 1040 有几个PAT (25 分)
字符串 APPAPT 中包含了两个单词 PAT,其中第一个 PAT 是第 2 位(P),第 4 位(A),第 6 位(T):第二个 PAT 是第 3 位(P),第 4 位(A),第 6 位(T). 现 ...
- ValueError:Object arrarys cannot be loaded when allow_pickle=False
运行python程序报错:ValueError:Object arrarys cannot be loaded when allow_pickle=False 错误原因:numpy版本太高 解决方案: ...
- Hdu第八场 树形dp+基环树
Card Game 每个牌背面的数字朝正面的数字连一条有向边 则题目变为问你最少翻转多少次 能使得每个数字的入度不超过1 首先判断图中每个连通块是不是树或者基环树 因为只有树或者基环树能使得每个点的入 ...
- ibatis与mybatis的区别
一.最主要的区别就是mybatis简化了编码的过程,不需要去写dao的实现类,直接写一个dao的借口,再写一个xml配置文件,整个mybatis就配置好了,也就是数据库就连接好了,然后再service ...
- 介绍知道的http返回的状态码
100 Continue 继续.客户端应继续其请求 101 Switching Protocols 切换协议.服务器根据客户端的请求切换协议.只能切换到更高级的协议,例如,切换 ...
- 19.8.8 flutter 学习之创建第一个可变的Widget
创建一个很简单的可变的Widget 效果就是点击字的时候会变化 完整代码: class CarPage extends StatefulWidget { @override _CarState cre ...
- windows下前端开发环境配置
nvm安装 多媒体布局 前端自动化构建工具,gulp nvm管理node的版本,npm是node的包管理工具 下载nvm安装包 https://github.com/coreybutler/nvm-w ...
- 网络编程简介(OSI七层协议,TCP协议原理,三次握手与四次挥手)
目录 网络编程 软件开发架构 C/S架构 B/S架构 网络编程的发展史 互联网协议 1.物理连接层 2.数据链路层 3.网络层 4.传输层 5.应用层 三次握手四次挥手 三次握手建链接 数据传输 四次 ...
- 32.把数组排成最小的数(python)
题目描述 输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个.例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323. # -*- ...