我们来看一个简单的需求,比如说下面这幅图像:

这是一幅公路上的行车图像,假如我们想把车道线提取出来,该怎么办呢?

我们观察,发现车道线是黄色的或者白色的。那么我们想到的是可以把行车图像中的黄色颜色和白色颜色提取出来。

我们知道,在RGB颜色模式中,白色是[255,255,255],黄色是[255,255,0]。但是行车图像中的白色和黄色可不完全是纯白色和纯黄色。因此,需要在一定的范围内选择。

import cv2
import numpy as np
img = cv2.imread("lane_lines.jpg")
# yellow and white color selection
lower_white = np.array([200, 200, 200])
upper_white = np.array([255, 255, 255])lower_yellow = np.array([200, 200, 0])
upper_yellow = np.array([255, 255, 50])white = cv2.inRange(img, lower_white, upper_white)
yellow = cv2.inRange(img, lower_yellow, upper_yellow)cv2.imshow("white", white)
cv2.imshow("yellow", yellow)cv2.imwrite("white.png", white)
cv2.imwrite("yellow.png", yellow)
cv2.waitKey()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19


上图为提取的白色颜色,下图为提取的黄色颜色。我们可以看到。白色提取出来了,但黄色并没有提取出来。这是因为RGB颜色模型的局限性,需要R/G/G三个值协同配合才能混合成颜色,这意味着需要考虑至少2个变量的配比问题,非常的麻烦。

所以,通过RGB颜色模型进行颜色选择的难度非常大。
那有没有其它办法呢?我们知道,RGB只是颜色表达模型中的一种,虽然是最常见的一种。但还有其它颜色表达模型,例如HSV /HSL等。

我们看看HSV颜色模型。H表示色度,S表示饱和度,V表示亮度。与RGB一样,也是3个分量。但H分量是唯一与颜色本质相关的分量,只要固定了H值范围,那么表现的颜色就会基本固定。白色和黑色则主要通过调整饱和度S和亮度V来实现,很显然,白色最亮,黑色最暗。

当然,用HSV取颜色的前提是图像是用HSV表示的,用OpenCV转换下。

img = cv2.imread("lane_lines.jpg")
img = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
# yellow and white color selection
lower_white = np.array([0, 0, 200])
upper_white = np.array([180, 40, 255])lower_yellow = np.array([15, 50, 50])
upper_yellow = np.array([35, 255, 255])white = cv2.inRange(img, lower_white, upper_white)
yellow = cv2.inRange(img, lower_yellow, upper_yellow)cv2.imshow("white", white)
cv2.imshow("yellow", yellow)
cv2.waitKey()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16



上图为提取的白色颜色区域,下图为提取的黄色颜色区域,可以看到这次黄色区域被提取出来了。可以很明显的看到车道线了。当然,你也可以转换成HSL颜色空间来取颜色。

同样,如果我们在绘图时,需要随机选择颜色怎么办呢?例如绘制10种不同的曲线,随机选择10种不同的颜色进行绘制。用RGB颜色空间随机选择当然是可以的。例如R、G、B分别在[0,255]之间进行随机,但是这样得到的颜色不太友好,有时偏暗,有时外观不佳。

而在HSV颜色空间中,可以只对色度H进行随机,而饱和度S和亮度V都用最高值,这样随机得到的颜色会更加鲜艳明亮。

import matplotlib.pyplot as plt
num_color = 9
height, width = 100, 100
colors = []
for i in range(num_color):hsv = np.zeros((height, width, 3), dtype=np.uint8)hsv[hsv >= 0] = 255hsv[:, :, 0] = int(i / num_color * 180)RGB = cv2.cvtColor(hsv, cv2.COLOR_HSV2RGB)plt.subplot(3, 3, i + 1)plt.imshow(RGB)plt.axis("off")
plt.show()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

转载自:https://blog.csdn.net/saltriver/article/details/79680859

数字图像处理--颜色选择相关推荐

  1. 【图像处理】数字图像处理之颜色

    00. 目录 文章目录 00. 目录 01. 什么是颜色 02. 颜色的数字化 03. 常见颜色模型 04. 颜色模型分类 05. 附录 01. 什么是颜色 颜色是通过眼.脑和我们的生活经验所产生的对 ...

  2. 基于颜色布局描述符(CLD)图像特征提取算法使用Python实现简单的人脸检测功能并使用PyQt5构建简单的功能界面(数字图像处理课程实验)

    文章目录 一.环境准备 二.数据集准备 三.项目结构 四.完整参考代码 imgCode/testUI3.py imgCode/test2.py 五.运行结果 测试一: 测试二 六.参考链接 一.环境准 ...

  3. 数字图像处理(DIP)实验4 目标颜色识别

    数字图像处理(DIP)实验4 目标颜色识别 数字图像处理课程相关文章 传送门 https://blog.csdn.net/qq_46164507/article/details/122503851 博 ...

  4. 数字图像处理——第十章 图像分割

    数字图像处理--第十章 图像分割 文章目录 数字图像处理--第十章 图像分割 写在前面 1 点.线和边缘检测 1.1 孤立点的检测 1.2 线检测 1.3 边缘检测 2 阈值处理 2.1 单一全局阈值 ...

  5. 数字图像处理——第九章 形态学图像处理

    数字图像处理--第9章 形态学图像处理 文章目录 数字图像处理--第9章 形态学图像处理 1 基础知识 1.1 形态学图像 1.2 二值图像 2 腐蚀和膨胀 2.1 腐蚀 2.2 膨胀 3 开操作与闭 ...

  6. 数字图像处理知识点总结

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达本文转自|新机器视觉 数字图像处理知识点总结 第一章 导论 1.   ...

  7. 基matlab的水果识别的应用,基于MATLAB的水果识别的数字图像处理

    基于MATLAB的水果识别的数字图像处理 图像处理 ( 报告 ) 题目 基于 MATLAB 的 水果识别的数字图像处理 指导教师 职称 教授 学生姓名 学号 专 业 院(系) 完成时间 2016 年 ...

  8. 数字图像处理——第三章 空间域图像增强(灰度变换和直方图处理)

    文章目录 空间域图像增强 1. 背景知识 2. 基本灰度变换 2.1 图像反转 2.2 对数变换 2.3 幂次变换 2.4 分段线性变换函数 2.4.1 对比拉伸 2.4.2 灰度切割 2.4.3 位 ...

  9. 数字图像处理与Python实现笔记之图像特征提取

    数字图像处理与Python实现笔记 摘要 绪论 1 数字图像处理基础知识 2 彩色图像处理初步 3 空间滤波 4 频域滤波 5 图像特征提取 5.1 图像颜色特征提取 5.1.1 颜色直方图 1 一般 ...

最新文章

  1. maven 命令创建多模块工程
  2. Windows软件授权管理工具 slmgr命令详解
  3. 【资讯】CloudBase Framework工具推荐:前后端一体化部署,效能提升开源“神器”
  4. servlet3.0新特性_查看Servlet 3.0的新增功能
  5. leetcode1432. 改变一个整数能得到的最大差值(贪心)
  6. Windows Phone 如何振动手机?
  7. Node.js-Express框架
  8. Java 对象的序列化
  9. 策略模式Strategy——坐什么车回家?
  10. Cocos2d-JS项目之三:使用合图
  11. buildconfiguration[C/C++]_[从netbeans里提取的通用构建C++项目的Makefile文件]
  12. 13. 用hexdump工具分析镜像的16进制代码
  13. C# Resharper的简单使用介绍
  14. python100天发音_GitHub - hhttss999/Python-100-Days: Python - 100天从新手到大师
  15. uni-app自定义全屏切换组件
  16. 交换机端口与MAC绑定
  17. 2022年最新国产单端口1000M Ethernet PHY简介
  18. 半年销售100万辆 关注比亚迪后300万时代
  19. 模糊控制matlab算例,matlab模糊逻辑工具箱
  20. [VIM].vimrc設置詳解---配置你的vim

热门文章

  1. 各种云计算平台和云计算管理平台介绍
  2. Linux Crontab 定时任务 及 Ubuntu 中cron指令使用
  3. 【规范化标准】之 ESLint、Stylelint
  4. 【安卓开发】启动另一个 Activity
  5. “1251 – Client does not support authentication protocol requested by server;consider upgrading MySQL
  6. C#LeetCode刷题之#383-赎金信(Ransom Note)
  7. C#开发笔记之01-为什么开源框架会大量的使用protected virtual?
  8. 我如何使用Python查找有趣的人来关注Medium
  9. origin对数据进行操作
  10. e分钟带你利用Python制作词云图