色彩阀值化处理——openCV-python中inRange()等相关函数实测
色彩阀值化处理——openCV-python中inRange()等相关函数实测
色彩阀值化
在图像处理的过程中,使用各种形态学操作或者滤波的方式来突显我们关注的元素,同时降低噪声并减少干扰我们提取关键元素的影响项。除了这些方法外,我们可以在原图中先依据颜色的特征,提取出更为关键的像素。就像车道检测时,一般车道只有两种颜色:黄色和白色。所以我们可以在 RGB 色彩空间(Color Space) 对这两种颜色进行过滤从而提取出车道线的像素。
色彩空间:使用一组值(通常使用三个、四个值或者颜色成分)表示颜色方法的抽象数学模型。有利用原色相混的比例表示的色彩空间,如 RGB (Red, Green, Blue) 颜色空间; 也有利用不同的概念表示的色彩空间,如 HSV (色相 hue, 饱和度 saturation, 明度 value) 以及 HSL (色相 hue,饱和度 saturation,亮度 lightness/luminance) 。
在OpenCV中,RGB三通道的图像的读取 cv2.imread() 的结果是以 BGR 顺序排列的,而在使用matplotlib的 plt.imread() 时, 读取的通道排列顺序则为 RGB 。因此此处应当注意区别。
openCV中cv2.inRange()函数是实现该功能的关键,我们先看看官网对该函数的定义:
dst = cv.inRange( src, lowerb, upperb[, dst] )
检测数组元素是否位于其他两个元素之间。
该函数检测范围方式如下:
- 对于单通道输入的每个元素:
dst(I)=lowerb(I)0⩽src(I)0⩽upperb(I)0dst(I)=lowerb(I)_{0}\leqslant src(I)_{0}\leqslant upperb(I)_{0}dst(I)=lowerb(I)0⩽src(I)0⩽upperb(I)0 - 对于双通道输入:
dst(I)=lowerb(I)0⩽src(I)0⩽upperb(I)0∧lowerb(I)1⩽src(I)1⩽upperb(I)1dst(I)=lowerb(I)_{0}\leqslant src(I)_{0}\leqslant upperb(I)_{0}\wedge lowerb(I)_{1}\leqslant src(I)_{1}\leqslant upperb(I)_{1} dst(I)=lowerb(I)0⩽src(I)0⩽upperb(I)0∧lowerb(I)1⩽src(I)1⩽upperb(I)1 - 同样应用于四通道
也就是说,如果src (I)在指定的1D, 2D, 3D,…框内则dst(I)为255,否则为0。当下边界和/或上边界参数为标量时,应省略上述公式中在上、下边界处的索引(I)。
各参数详细含义:
- src 输入的数组
- lowerb 下边界数组或标量.
- upperb 上边界数组或标量.
- dst 与src和CV_8U类型大小相同的输出数组。
接下来将结合简单的例子通过python更好地理解这个函数:
import matplotlib.pyplot as plt import numpy as np import cv2 # 对图片进行读取 img_cv2 = cv2.imread('D:\\test\\CVtest.jpg') print(img_cv2)
为了方便理解,我用画板工具画了一个5×5像素点的红色图片。上述代码运行结果为:
[[[ 36 27 237] [ 36 27 237] [ 36 27 237] [ 36 27 237] [ 36 27 237]] [[ 36 27 237] [ 36 27 237] [ 36 27 237] [ 36 27 237] [ 36 27 237]] [[ 36 27 237] [ 36 27 237] [ 36 27 237] [ 36 27 237] [ 36 27 237]] [[ 36 27 237] [ 36 27 237] [ 36 27 237] [ 36 27 237] [ 36 27 237]] [[ 36 27 237] [ 36 27 237] [ 36 27 237] [ 36 27 237] [ 36 27 237]]]
读者可以自行测试一下,B=36,G=27,R=237为红色。
# 创建RGB色彩空间 color_Low1 = np.array([30,27,237]) color_Low2 = np.array([39,27,237]) color_High = np.array([40,27,237]) # 对图片进行阀值化处理 img_dst1 = cv2.inRange(img_cv2,color_Low1,color_High) img_dst2 = cv2.inRange(img_cv2,color_Low2,color_High) #对结果进行打印 print(img_dst1,'\n', img_dst2) # 运行结果分别为 [[255 255 255 255 255] [255 255 255 255 255] [255 255 255 255 255] [255 255 255 255 255] [255 255 255 255 255]] [[0 0 0 0 0] [0 0 0 0 0] [0 0 0 0 0] [0 0 0 0 0] [0 0 0 0 0]]
可以看出,当图片中的像素点落在色彩空间时,输出结果全是255,当像素点不落在色彩空间是,输出结果全是0。对最终结果进行显示:
#对图像进行展示 cv2.imshow("origin_img",img_cv2) cv2.imshow("dst_img1",img_dst1) cv2.imshow("dst_img2",img_dst2) cv2.waitKey(0) cv2.destroyAllWindows()
最终结果为一个红色、一个黑色的、一个白色的小点。
- Python3与OpenCV3.3 图像处理(四)--色彩空间
- python文件处理相关函数
- [Python图像处理] 一.图像处理基础知识及OpenCV入门函数
- python字符串、字符串处理函数及字符串相关操作
- opencv中图像伪彩色处理(C++ / Python)
- 基于OpenCV及Python的数独问题识别与求解(一)图像预处理
- Linux Centos安装python相关库失败处理方法
- Python-OpenCV 处理图像(二):滤镜和图像运算
- python:1:数字类型相关函数
- Python相关模块学习1 处理文件名模块glob
- python3 字符串操作相关函数
- [ [资源贴] ]数据集、函数、python、tensorflow、caffe等相关的资源分享
- OpenCV中inRange()函数的使用
- Python多线程的创建,相关函数和守护线程的理解
- python字符串处理函数总结
- Opencv3 python学习1——图片基础处理
- Matlab 图像处理相关函数命令大全
- opencv-python常用函数复制粘贴
- Python从阿里云Oss拉数据写入Hive表并进行相关处理
- 【OpenCV】图像处理和图像识别中常用的OpenCV函数汇总