构建代码

import numpy as np
import collections
import cv2
import numpy as np
import matplotlib.pyplot as plt
import time#定义字典存放颜色分量上下限
#例如:{颜色: [min分量, max分量]}
#{'red': [array([160, 43, 46]), array([179, 255, 255])]}
"""
0是黑色 255是白色
mask = cv2.inRange(hsv, lower_red, upper_red) #lower20===>0,upper200==>0,
函数很简单,参数有三个
第一个参数:hsv指的是原图第二个参数:lower_red指的是图像中低于这个lower_red的值,图像值变为0
第三个参数:upper_red指的是图像中高于这个upper_red的值,图像值变为0而在lower_red~upper_red之间的值变成255
"""
def get_ColorList():dict = collections.defaultdict(list)# 红色1lower_red = np.array([0, 69, 165])upper_red = np.array([10, 255, 255])color_list = []color_list.append(lower_red)color_list.append(upper_red)dict['red1'] = color_list# 红色2lower_red = np.array([125, 49, 138])upper_red = np.array([180, 255, 255])color_list = []color_list.append(lower_red)color_list.append(upper_red)dict['red2']=color_list# 橙lower_red = np.array([11, 81, 148])upper_red = np.array([25, 255, 255])color_list = []color_list.append(lower_red)color_list.append(upper_red)dict['orange'] = color_list# 黄色lower_yellow = np.array([11, 67, 127])upper_yellow = np.array([34, 255, 255])color_list = []color_list.append(lower_yellow)color_list.append(upper_yellow)dict['yellow'] = color_list# 类绿色lower_green = np.array([35, 43, 165])upper_green = np.array([124, 255, 255])color_list = []color_list.append(lower_green)color_list.append(upper_green)dict['green_like'] = color_listreturn dictdef get_binary_image(img_path):img = cv2.imread(img_path)hsv = cv2.cvtColor(img,cv2.COLOR_BGR2HSV)color_dict = get_ColorList()mask_red1 = cv2.inRange(hsv, color_dict['red1'][0],color_dict['red1'][1])mask_red2 = cv2.inRange(hsv, color_dict['red2'][0],color_dict['red2'][1])mask_orange = cv2.inRange(hsv, color_dict['orange'][0],color_dict['orange'][1])mask_yellow = cv2.inRange(hsv, color_dict['yellow'][0],color_dict['yellow'][1])mask_green_like = cv2.inRange(hsv, color_dict['green_like'][0],color_dict['green_like'][1])red_add_mask = mask_red1 + mask_red2 + mask_orangeyellow_add_mask = mask_yellow + mask_orangeshow_red_add = cv2.bitwise_and(img, img, mask = red_add_mask)show_yellow = cv2.bitwise_and(img, img, mask = mask_yellow)show_yellow_add = cv2.bitwise_and(img, img, mask = yellow_add_mask)show_green = cv2.bitwise_and(img, img, mask = mask_green_like)return img,hsv,red_add_mask,yellow_add_mask,mask_green_like,show_red_add,show_yellow_add,show_green

执行代码

t0 = time.time()
img,hsv,red_add_mask,yellow_add_mask,mask_green_like,show_red_add,show_yellow_add,show_green = \
get_binary_image(img_path = 'test_images/891.jpg')
print(time.time()-t0)

显示结果

fig = plt.gcf() # 分通道显示图片
fig.set_size_inches(12, 28)
plt.subplot(851),plt.imshow(np.flip(img,axis = 2)),plt.axis('off'),plt.title('original_img')
plt.subplot(852),plt.imshow(hsv),plt.axis('off'),plt.title('HSV')
plt.subplot(8,5,3),plt.imshow(np.flip(show_red_add,axis = 2)), plt.axis('off'),plt.title('show_red_add')  # show_red_add
plt.subplot(8,5,4),plt.imshow(np.flip(show_yellow_add,axis = 2)), plt.axis('off'),plt.title('show_yellow_add')# show_yellow_add
plt.subplot(8,5,5),plt.imshow(np.flip(show_green,axis = 2)), plt.axis('off'),plt.title('show_green')# show_green
plt.subplot(8,5,8),plt.imshow(red_add_mask, cmap='gray'), plt.axis('off'),plt.title('red_add_mask')# red_add_mask
plt.subplot(8,5,9),plt.imshow(yellow_add_mask, cmap='gray'), plt.axis('off'),plt.title('yellow_add_mask')# mask_yellow
plt.subplot(8,5,10),plt.imshow(mask_green_like, cmap='gray'), plt.axis('off'),plt.title('mask_green_like')# mask_green_like

结果



(信号灯七)综合版本-使用HSV颜色空间将类绿色、红色和黄色区域分别二值化相关推荐

  1. AR学习笔记(七):阈值二值化优化与颜色分割的优化

    AR学习笔记(七):阈值二值化优化与颜色分割的优化 阈值二值化的优化 当前方案 图像预处理 阈值二值化 优化方案 otsu法 顶帽变换 分块阈值法 颜色分割的优化 当前方案 优化方案 HSV模型分割 ...

  2. Python使用openCV把原始彩色图像转化为灰度图、使用OpenCV把图像二值化(仅仅包含黑色和白色的简化版本)、基于自适应阈值预处理(adaptive thresholding)方法

    Python使用openCV把原始彩色图像转化为灰度图.使用OpenCV把图像二值化(仅仅包含黑色和白色的简化版本).基于自适应阈值预处理(adaptive thresholding)方法 目录

  3. 图像二值化后提边缘效果不好?那是你不会用HSV色彩空间

    作者:RayChiu_Labloy 版权声明:著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处 我们平时在做图像边缘提取的时候一般经常在RGB空间做图像二值化然后阈值处理后提取边缘, ...

  4. 根据HSV阈值对图像二值化

    //蓝色的HSV范围int iLowH = 100;int iHighH = 124;int iLowS = 43;int iHighS = 255;int iLowV = 46;int iHighV ...

  5. Python-OpenCV 处理图像(六)(七)(八):对象识别 图像灰度化处理 图像二值化处理

    为了加快处理速度,在图像处理算法中,往往需要把彩色图像转换为灰度图像. 0x00. 灰度图 灰度数字图像是每个像素只有一个采样颜色的图像,这类图像通常显示为从最暗黑色到最亮的白色的灰度. 灰度图像与黑 ...

  6. 如何利用Matlab制作色卡,(七)用matlab生成二值化图和24色卡

    [code]%生成4个半径依次为10,30,50,100的圆 clc; clear; close all; I = zeros(256,256); %定义一个256*256的灰度图 iter = [1 ...

  7. Python+Opencv简易车牌识别(二):形态学运算,HSV颜色空间筛选与图像分割

    注:这是依然一个简单的车牌识别demo 1.前言 在上一篇Python+Opencv简易车牌识别(一):基于HSV颜色空间的图像分割中,我们讲了如何仅基于颜色来进行简单粗暴的车牌分割.今天我们考虑对图 ...

  8. 根据HSV颜色空间识别魔方是否还原

    本文方向 就是想通过一张照片检测魔方是否还原,整个CSDN上找不到方法,经过探索,找到了一个还算靠谱的方法,在这里介绍给大家,同时也讲讲我当时的心路历程,测试过但最终放弃的一些方法,如果网友们有改进方 ...

  9. 六、HSV颜色空间应用实例——颜色分割提取与替换

    教程汇总:python基础入门系列 通过之前的章节(四.OpenCV颜色空间--HSV颜色模型),我们已经初步认识了HSV颜色空间的特性与优势,现在就来看两个典型的应用实例,颜色分割提取 与 颜色替换 ...

最新文章

  1. C# 二进制字节流查找函数IndexOf
  2. 升级MariaDB为10.1版本
  3. 重现江湖!大数据高并发——架构师秘籍
  4. linux批量替换文件名中的相同字符
  5. 结合我的创业经历,有一下3点感受
  6. Gensim进阶教程
  7. 实战一:输出“王者荣耀”的游戏角色
  8. CSS之BFC(Block Formatting Context)
  9. c++ 圆整(取整)相关函数大全(rint lrint llrint round ceil floor trunc)
  10. 百度ai人体关键点识别
  11. C# 颜色的梯度渐变
  12. 几何光学学习笔记(23)- 5.6 远心光路
  13. springboot+maven+jwt学生信息增删查改
  14. python语言命名规则-一文轻松掌握python语言命名规范规则
  15. 通达信大智慧同花顺益盟操盘手股票指标公式编写从入门到精通-七天学会指标编写
  16. linux 命令行别名,bash命令行实用的别名-alias命令
  17. MySQL实战——表、索引创建与优化
  18. Pandas把某一列日期的月份加减 月份前进或后退
  19. fastadmin创蓝短信插件第二版
  20. MATLAB绘制主函数动态图,matlab绘制动态图

热门文章

  1. 五、动态软件体系结构
  2. 记录一下之前写的文章--测试之不可承受之轻
  3. c编程----段定义的使用
  4. 生活随记-剪纸与父子
  5. Sign签名生成与校验
  6. 【汇正财经】扬帆起航,医美市场行业规模扩张
  7. android多个module打包aar,android 多module打包aar
  8. 第一篇:详细介绍三次握手和四次挥手
  9. C# 在wpf中如何使用image
  10. ASEMI快恢复二极管SFP3006和瞬态二极管一样吗?SFP3006和TVS能否代换