赞
踩
这篇文章主要是想搞清楚限定值的参数lowerbarray和upperbarray的详细设定
文章最后得出结论限定值的三个参数为[B, G, R]对应颜色的数值
函数体:
resultarray = cv2.inRange(src, lowerbarray, upperbarray[, dst] ) -> dst
保存的图片数组 = 函数名称(源图片, 颜色下限数组,颜色上限数组[输出数组(一般不用)])
输出的图片为二值化图只有黑白两种颜色
官方文档
假设:颜色上限为180,颜色下限为50,图片颜色有40, 80,200
图片颜色40 < 颜色下限50 < 图片颜色80 < 颜色上限180 < 图片颜色 200
图片颜色40改成0就是黑色,图片颜色80改成255就是白色,图片颜色200改成0就是黑色
颜色下限到颜色上限之间的值改为255,其余的都改为0
先用画图工具新建一张单色红色RGB图片 R:254, G:0, B:0
代码为
- import numpy as np #导入numpy创建数组
- import cv2 #导入OPENCV
- img = cv2.imread('2.bmp') #读取图片
- print(img) #打印图片数组
- low1 = np.array([0, 0, 0]) #设置第一组对比数组下限
- low2 = np.array([0, 0, 0]) #设置第二组对比数组下限
- up1 = np.array([0, 0, 255]) #设置第一组对比数组上限
- up2 = np.array([0, 0, 254]) #设置第二组对比数组上限
- img2 = cv2.inRange(img, low1, up1) #生成第一张对比图片
- img3 = cv2.inRange(img, low2, up2) #生成第二张对比图片
- cv2.imshow("img", img) #显示原图
- cv2.imshow("img2", img2) #显示第一张对比图片
- cv2.imshow("img3", img3) #显示第二张对比图片
- cv2.waitKey(0) #图片显示等待
CV2导入的图片颜色模式为BGR,所以在这里设置颜色上限为B:0 G:0 R:255/254
(此处图片分析BGR模式,未转换为HSV模式)
然后我们运行代码查看生成的图片
原图片BGR数组为
生成对比图
原图片单色 B:0G:0 R:254 | 第一组颜色下限为:B:0 G:0 R:0 第一组颜色上限为:B:0 G:0 R:255 下限:0 < 图片颜色:254 <上限:255 图片颜色在限定范围内 设置图片颜色为255(白色) inRange转换图片为二化值(只有黑白两种颜色) | 第二组颜色下限为:B:0 G:0 R:0 第二组颜色上限为:B:0 G:0 R:254 下限:0 < 上限:254 <= 图片颜色:254 图片颜色不在限定范围内 设置图片颜色为0(黑色) inRange转换图片为二化值(只有黑白两种颜色) |
再修改图片为两种颜色混合纯色图 R:253 G:252 B:0
先用原代码对比
新颜色BGR数组
新颜色对比图
可以看出颜色限定值BGR要同时满足才会改变原图颜色值为255(白色)
下面是改变限定值的代码
- import numpy as np #导入numpy创建数组
- import cv2 #导入OPENCV
- img = cv2.imread('2.bmp') #读取图片
- print(img) #打印图片数组
- low1 = np.array([0, 0, 0]) #设置第一组对比数组下限
- low2 = np.array([0, 0, 0]) #设置第二组对比数组下限
- up1 = np.array([0, 251, 253]) #设置第一组对比数组上限 这里修改B:0 G:251 R:253
- up2 = np.array([0, 252, 253]) #设置第二组对比数组上限 这里修改B:0 G:252 R:253
- img2 = cv2.inRange(img, low1, up1) #生成第一张对比图片
- img3 = cv2.inRange(img, low2, up2) #生成第二张对比图片
- cv2.imshow("img", img) #显示原图
- cv2.imshow("img2", img2) #显示第一张对比图片
- cv2.imshow("img3", img3) #显示第二张对比图片
- cv2.waitKey(0) #图片显示等待
改变限定值且BGR限定值同时满足时才会修改颜色值为255(白色)
新颜色值原图 B:0 G:252 R:253 | 第一组颜色下限为:B:0 G:0 R:0 第一组颜色上限为:B:0 G:251 R:253 R下限:0<图片颜色:253 <=上限:253 G下限:0<上限:253<图片颜色:252 不满足两种颜色限定 图片颜色在不限定范围内 设置图片颜色为0(黑) | 第二组颜色下限为:B:0 G:0 R:0 第二组颜色上限为:B:0 G:252 R:253 R下限:0 < 图片颜色:253 <=上限:253 G下限:0<图片颜色:252<=上限:252 满足两种颜色限定 图片颜色在限定范围内 设置图片颜色为255(白色) |
到这里简单色限定分析完成
新建一张混合色的图片选择想要的颜色
想要提取的黄色颜色值B:0 G:242 R:254,限定值设为:B:0-255 G:178-243 R:36-254
限定值蓝色B为0-255,因为B的值为黄色的亮暗参数, 深 0<----B---->255 浅
代码如下
- import numpy as np #导入numpy创建数组
- import cv2 #导入OPENCV
- img = cv2.imread('2.bmp') #读取图片
- print(img) #打印图片数组
- low1 = np.array([0, 178, 36]) #设置颜色BGR下限
- up1 = np.array([255, 243, 254]) #设置颜色BGR上限
- img2 = cv2.inRange(img, low1, up1) #生成截取图片
- cv2.imshow("img", img) #显示原图
- cv2.imshow("img2", img2) #显示截取图片
- cv2.waitKey(0) #图片显示等待
生成截取图片
从图片看出截取了非常粗糙的图片,因为限定值设置的过于精确了
- import numpy as np #导入numpy创建数组
- import cv2 #导入OPENCV
- img = cv2.imread('2.bmp') #读取图片
- print(img) #打印图片数组
- low1 = np.array([0, 178, 36]) #设置颜色BGR下限
- up1 = np.array([65, 255, 255]) #设置颜色BGR上限 修改B:65 G:255 R:255
- img2 = cv2.inRange(img, low1, up1) #生成截取图片
- cv2.imshow("img", img) #显示原图
- cv2.imshow("img2", img2) #显示截取图片
- cv2.waitKey(0) #图片显示等待
修改后生成图片
这样就比较好了,可以根据自己的需求进行修改限定值
这篇文章主要是想搞清楚限定值的参数lowerarray和upperarray的详细设定
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。