首页 > 编程语言 >OpenCV-Python 颜色空间转换

OpenCV-Python 颜色空间转换

时间:2024-10-22 09:19:38浏览次数:9  
标签:blue 转换 Python cv2 mask OpenCV hsv np 255

一、颜色空间转换

import cv2
import numpy as np
img = cv2.imread('lena.jpg')
# 转换成灰度图
img_gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
cv2.imshow('img', img)
cv2.imshow('gray', img_gray)
cv2.waitKey(0)

在这里插入图片描述

颜色转换其实是数学运算,如灰度化最常用的是:gray = R* 0.299 + G* 0.587 + B * 0.114

二、视频中特定颜色物体追踪
HSV:色调(H),饱和度(S),明度(V)。对光照的变换并不是很敏感,相比于BGR更易于区分颜色,常用于颜色识别的模型。转换模式用COLOR_BGR2HSV表示

OpenCV中色调H的范围为[0, 179],饱和度S是[0, 255],明度V是[0, 255]。虽然H的理论数值是0°~360°,但8位图像像素点的最大值是255,所以OpenCV除以了2.

现在,我们实现一个使用HSV来只显示视频中蓝色物体的例子,步骤如下:

1. 捕获视频中一帧

2. 从BGR转换到HSV

3. 提取蓝色范围的物体

4. 只显示蓝色物体

# 蓝色的hsv值
blue = np.uint8([[[255, 0, 0]]])
hsv_blue = cv2.cvtColor(blue, cv2.COLOR_BGR2HSV)
print(hsv_blue)
[[[120 255 255]]]
# 绿色的hsv值
green = np.uint8([[[0, 255, 0]]])
hsv_green = cv2.cvtColor(green, cv2.COLOR_BGR2HSV)
print(hsv_green)
[[[ 60 255 255]]]
# 红色的hsv值
red = np.uint8([[[0, 0, 255]]])
hsv_red = cv2.cvtColor(red, cv2.COLOR_BGR2HSV)
print(hsv_red)
[[[  0 255 255]]]

import numpy as np

capture = cv2.VideoCapture(0)

# 蓝色的范围,不同光照条件下不一样,可灵活调整
lower_blue = np.array([100, 110, 110])
upper_blue = np.array([130, 255, 255])

while(True):
    # 1. 捕获视频中的一帧
    ret, frame = capture.read()
    
    # 2.从BGR转换到HSV
    hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)
    
    # 3. inRange(): 介于lower/upper之间的白色,其余黑色
    mask = cv2.inRange(hsv, lower_blue, upper_blue)
    
    # 4. 只保留原图中的蓝色部分
    res = cv2.bitwise_and(frame, frame, mask=mask)
    
    cv2.imshow('frame', frame)
    cv2.imshow('mask', mask)
    cv2.imshow('res', res)
    
    if cv2.waitKey(1) == ord('q'):
        break

在这里插入图片描述

当然,你也可以只显示视频中红色或者绿色的物体。只要修改一下HSV值的上下限即可。

三、在视频中同时提取红、绿、蓝色的物体

capture = cv2.VideoCapture(0)

# 蓝色的范围,不同光照条件下不一样,可灵活调整
lower_blue = np.array([100, 110, 110])
upper_blue = np.array([130, 255, 255])

# 绿色的范围
lower_green = np.array([40, 110, 110])
upper_green = np.array([70, 255, 255])

# 红色的范围
lower_red = np.array([160, 110, 110])
upper_red = np.array([179, 255, 255])

while(True):
    # 1. 捕获视频中的一帧
    ret, frame = capture.read()

# 2.从BGR转换到HSV
hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)

# 3. inRange(): 介于lower/upper之间的白色,其余黑色
mask_blue = cv2.inRange(hsv, lower_blue, upper_blue)
mask_green = cv2.inRange(hsv, lower_green, upper_green)
mask_red = cv2.inRange(hsv, lower_red, upper_red)

mask = mask_blue + mask_green + mask_red

# 4. 只保留原图中的蓝色部分
res = cv2.bitwise_and(frame, frame, mask=mask)

cv2.imshow('frame', frame)
cv2.imshow('mask', mask)
cv2.imshow('res', res)

if cv2.waitKey(1) == ord('q'):
    break

在这里插入图片描述

四、小结
cv2.cvtColor()函数用来进行颜色空间转换,常用BGR↔RGB,BGR↔Gray,BGR↔HSV
HSV颜色模型常用于颜色识别,要想知道某种颜色在HSV下的值,可以将它的BGR值用cvtColor()转换得到

标签:blue,转换,Python,cv2,mask,OpenCV,hsv,np,255
From: https://blog.csdn.net/m0_37302966/article/details/143139450

相关文章

  • 将有序数组转换为二叉搜索树
    给你一个整数数组 nums ,其中元素已经按 升序 排列,请你将其转换为一棵 平衡 二叉搜索树。示例1:输入:nums=[-10,-3,0,5,9]输出:[0,-3,9,-10,null,5]解释:[0,-10,5,null,-3,null,9]也将被视为正确答案:示例2:输入:nums=[1,3]输出:[3,1]解释:[1,null,3]和[3......
  • 基于Python实现的衣物捐赠系统
    《基于Python的衣物捐赠系统的设计和实现》该项目采用技术Python的django框架、mysql数据库,项目含有源码、文档、PPT、配套开发软件、软件安装教程、项目发布教程、核心代码介绍视频等软件开发环境及开发工具:开发语言:python使用框架:Django前端技术:JavaScript、VUE.js(2.X)、......
  • python第五章课后习题
    importnumpyasnpimportmathfromscipy.optimizeimportminimize,Boundsdeffunc(x):returnsum(math.sqrt(x[i])foriinrange(100))defcon(x):return1000-np.sum(x[i]*(101-i+1)foriinrange(100))con1={'type':'ineq','fun&#......
  • linux后台运行python脚本
    一、使用sytemctl运行service准备需要运行的脚本HelloWorld.py,配置文件HelloWorld.servce十秒打印一次日志importtimeimportlogging#配置日志记录器logging.basicConfig(level=logging.INFO,format='%(asctime)s-%(message)s',datefmt='%Y-%m-%d%H:%M:%S')while......
  • Python Flask 数据库开发
    PythonFlask数据库开发引言环境配置创建Flask应用,连接数据库定义路由定义模型创建表创建API数据库直接操作启动Flask应用app.py示例运行Flask访问应用展望引言在现代web开发中,Python的Flask框架因其轻量和灵活性受到广泛欢迎。结合数据库技术,Flask......
  • python第三章课后习题
    efX(n):#差分方程的解return2*(-1)**(n+1)n_values=[0,1,2,3,4,5]forninn_values:print(f"X({n})={X(n)}")print("学号:3028")importnetworkxasnxG=nx.DiGraph()foriinrange(1,7):G.add_node(i)edges=[(1,2),(1,4......
  • Python沙箱逃逸(pyjail)
    参考链接:https://note.tonycrane.cc/ctf/misc/escapes/pysandbox/https://ctf-wiki.org/pwn/sandbox/python/python-sandbox-escape/https://www.cnblogs.com/mumuhhh/p/17811377.htmlhttps://www.bilibili.com/video/av1506392148/https://dummykitty.github.io/python/202......
  • Python pickle
    Pythonpicklepickle在python中实现对象结构的序列化和反序列化python序列化(Pickling)是一个将python对象层次结构转换为可以本地储存或者网络传输的字节流的过程python反序列化(unpickling)是将字节流还原为对象层次结构数据序列化:就是把不能直接储存的数据储存到......
  • Python+Django智慧农场管理系统
    收藏关注不迷路!!需要的小伙伴可以发链接或者截图给我项目介绍互联网日益成熟,走进千家万户,改变多个行业传统的工作方式。智慧农场管理以用户需求为基础,借由发展迅猛的互联网平台实现智慧农场管理的信息化,简化旧时智慧农场管理所需的纸质记录这一繁杂过程,从而大幅提高智慧农......
  • Python+Django智慧养老系统-养老信息服务平台
    收藏关注不迷路!!需要的小伙伴可以发链接或者截图给我项目介绍伴随着我国社会的发展,人民生活质量日益提高。互联网逐步进入千家万户,改变传统的管理方式,智慧养老系统-养老信息服务平台以互联网为基础,利用Python技术,结合Django框架和MySQL数据库开发设计一套基于B/S的智慧养老......