当前位置:   article > 正文

关于python中cv2.inRange函数参数的分析

cv2.inrange

 这篇文章主要是想搞清楚限定值的参数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

代码为

  1. import numpy as np #导入numpy创建数组
  2. import cv2 #导入OPENCV
  3. img = cv2.imread('2.bmp') #读取图片
  4. print(img) #打印图片数组
  5. low1 = np.array([0, 0, 0]) #设置第一组对比数组下限
  6. low2 = np.array([0, 0, 0]) #设置第二组对比数组下限
  7. up1 = np.array([0, 0, 255]) #设置第一组对比数组上限
  8. up2 = np.array([0, 0, 254]) #设置第二组对比数组上限
  9. img2 = cv2.inRange(img, low1, up1) #生成第一张对比图片
  10. img3 = cv2.inRange(img, low2, up2) #生成第二张对比图片
  11. cv2.imshow("img", img) #显示原图
  12. cv2.imshow("img2", img2) #显示第一张对比图片
  13. cv2.imshow("img3", img3) #显示第二张对比图片
  14. 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(白色)

下面是改变限定值的代码

  1. import numpy as np #导入numpy创建数组
  2. import cv2 #导入OPENCV
  3. img = cv2.imread('2.bmp') #读取图片
  4. print(img) #打印图片数组
  5. low1 = np.array([0, 0, 0]) #设置第一组对比数组下限
  6. low2 = np.array([0, 0, 0]) #设置第二组对比数组下限
  7. up1 = np.array([0, 251, 253]) #设置第一组对比数组上限 这里修改B:0 G:251 R:253
  8. up2 = np.array([0, 252, 253]) #设置第二组对比数组上限 这里修改B:0 G:252 R:253
  9. img2 = cv2.inRange(img, low1, up1) #生成第一张对比图片
  10. img3 = cv2.inRange(img, low2, up2) #生成第二张对比图片
  11. cv2.imshow("img", img) #显示原图
  12. cv2.imshow("img2", img2) #显示第一张对比图片
  13. cv2.imshow("img3", img3) #显示第二张对比图片
  14. 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 浅

代码如下

  1. import numpy as np #导入numpy创建数组
  2. import cv2 #导入OPENCV
  3. img = cv2.imread('2.bmp') #读取图片
  4. print(img) #打印图片数组
  5. low1 = np.array([0, 178, 36]) #设置颜色BGR下限
  6. up1 = np.array([255, 243, 254]) #设置颜色BGR上限
  7. img2 = cv2.inRange(img, low1, up1) #生成截取图片
  8. cv2.imshow("img", img) #显示原图
  9. cv2.imshow("img2", img2) #显示截取图片
  10. cv2.waitKey(0) #图片显示等待

 生成截取图片

 从图片看出截取了非常粗糙的图片,因为限定值设置的过于精确了

  1. import numpy as np #导入numpy创建数组
  2. import cv2 #导入OPENCV
  3. img = cv2.imread('2.bmp') #读取图片
  4. print(img) #打印图片数组
  5. low1 = np.array([0, 178, 36]) #设置颜色BGR下限
  6. up1 = np.array([65, 255, 255]) #设置颜色BGR上限 修改B:65 G:255 R:255
  7. img2 = cv2.inRange(img, low1, up1) #生成截取图片
  8. cv2.imshow("img", img) #显示原图
  9. cv2.imshow("img2", img2) #显示截取图片
  10. cv2.waitKey(0) #图片显示等待

 修改后生成图片

这样就比较好了,可以根据自己的需求进行修改限定值 

 这篇文章主要是想搞清楚限定值的参数lowerarray和upperarray的详细设定

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/花生_TL007/article/detail/145184
推荐阅读
相关标签
  

闽ICP备14008679号