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

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

文章最后得出结论限定值的三个参数为[B, G, R]对应颜色的数值

函数体:

resultarray = cv2.inRange(src, lowerbarray, upperbarray[, dst]    ) ->    dst

一、函数参数解析

保存的图片数组 =  函数名称(源图片, 颜色下限数组,颜色上限数组[输出数组(一般不用)])

输出的图片为二值化图只有黑白两种颜色

官方文档

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

 假设:颜色上限为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

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

代码为

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数组为                                                     

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

生成对比图

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

原图片单色

 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

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

 先用原代码对比

新颜色BGR数组

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

 新颜色对比图

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

可以看出颜色限定值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(白色)

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

新颜色值原图

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(白色)

到这里简单色限定分析完成

新建一张混合色的图片选择想要的颜色

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

想要提取的黄色颜色值B:0 G:242 R:254,限定值设为:B:0-255 G:178-243 R:36-254

限定值蓝色B为0-255,因为B的值为黄色的亮暗参数,  深 0<—-B—->255 浅

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

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

代码如下

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) #图片显示等待

 生成截取图片

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

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

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) #图片显示等待

 修改后生成图片

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

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

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

 

文章出处登录后可见!

已经登录?立即刷新

共计人评分,平均

到目前为止还没有投票!成为第一位评论此文章。

(0)
社会演员多的头像社会演员多普通用户
上一篇 2023年3月11日
下一篇 2023年3月11日

相关推荐