You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

OpenCV中cv2.inRange()参数尺寸不匹配报错,如何解决?

解决OpenCV inRange函数的尺寸不匹配错误

嘿,这个错误的根源很明显,你不小心犯了一个小疏忽:

你写的hsv=cv2.cvtColor(frame,cv2.COLOR_BGR2GRAY)是把BGR图像转换成了单通道的灰度图,但你定义的l_bu_b是三通道的数组(对应HSV的三个通道阈值)。cv2.inRange要求输入的图像和阈值数组的尺寸/通道数必须匹配,单通道图像和三通道阈值自然会报错。

正确的修正步骤:

  • 首先把颜色转换的参数改成cv2.COLOR_BGR2HSV,这样才能得到三通道的HSV图像,和你的阈值数组匹配:
    hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)
    
  • 另外别忘了在代码最后加上窗口等待和销毁的代码,不然显示的窗口会直接一闪而过:
    cv2.waitKey(0)
    cv2.destroyAllWindows()
    

完整的修正代码:

import cv2
import numpy as np

frame = cv2.imread('lena.jpg')
# 修正颜色转换:BGR转HSV而非灰度
hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)
# 蓝色的HSV阈值范围
l_b = np.array([110,50,50])
u_b = np.array([130,255,255])
mask = cv2.inRange(hsv, l_b, u_b)
cv2.imshow('frame', mask)
# 添加窗口控制代码
cv2.waitKey(0)
cv2.destroyAllWindows()

额外说明:

如果你的需求真的是处理灰度图,那阈值数组也要改成单通道的,比如l_b=np.array([50])u_b=np.array([130]),但从你用的阈值范围来看,你应该是想提取蓝色区域,所以上面的修正才是正确的方向。

内容的提问来源于stack exchange,提问作者Senuda Jayalath

火山引擎 最新活动