python-3.x - 如何检测不同的颜色
问题描述
我正在使用 opencv 学习图像过滤。我写了一些代码,但我的代码只能检测到红色的对象,我怎样才能检测到其他颜色的对象。
我尝试了不同的 numpy 数组值,但我仍然对输出不满意
hsv = cv2.cvtColor(frame,cv2.COLOR_BGR2HSV)
lower_blue = np.array([150,150,0])
upper_blue = np.array([255,255,225])
mask = cv2.inRange(hsv,lower_blue,upper_blue)
res = cv2.bitwise_and(frame,frame,mask=mask)
cv2.imshow('res',res)
解决方案
首先,H 的范围应该是从 0 到 179。要了解 HSV 值的什么组合会产生什么颜色,这里有一小段代码。下面的代码为 H、S、V 创建轨迹条。调整轨迹条以分割不同的颜色。
import cv2
import numpy as np
def nothing(x):
pass
cap = cv2.VideoCapture(0)
# Create a window
cv2.namedWindow('image',cv2.WINDOW_NORMAL)
# create trackbars for color change
cv2.createTrackbar('lowH','image',0,179,nothing)
cv2.createTrackbar('highH','image',179,179,nothing)
cv2.createTrackbar('lowS','image',0,255,nothing)
cv2.createTrackbar('highS','image',255,255,nothing)
cv2.createTrackbar('lowV','image',0,255,nothing)
cv2.createTrackbar('highV','image',255,255,nothing)
while(True):
ret, frame = cap.read()
# get current positions of the trackbars
ilowH = cv2.getTrackbarPos('lowH', 'image')
ihighH = cv2.getTrackbarPos('highH', 'image')
ilowS = cv2.getTrackbarPos('lowS', 'image')
ihighS = cv2.getTrackbarPos('highS', 'image')
ilowV = cv2.getTrackbarPos('lowV', 'image')
ihighV = cv2.getTrackbarPos('highV', 'image')
hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)
lower_hsv = np.array([ilowH, ilowS, ilowV])
higher_hsv = np.array([ihighH, ihighS, ihighV])
mask = cv2.inRange(hsv, lower_hsv, higher_hsv)
frame = cv2.bitwise_and(frame, frame, mask=mask)
cv2.imshow('image', frame)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
cap.release()
cv2.destroyAllWindows()
推荐阅读
- reactjs - 使用 React / Redux 滑动面板 0.3 或 0.6 秒是真的吗,我们已经必须调度两个动作来处理它?
- r - R预测函数使用字符变量作为模型名称
- excel - 该任务使用什么公式?
- java - 导航到 Firestore 中的特定文档时如何显示 subСollection
- amazon-web-services - 在 Amazon Cognito 中恢复已删除的用户池
- nginx - microk8s 入口导致操作超时
- arrays - 将“喜欢”的图像保存到本地存储
- scala - Scala 中的类型不匹配与 IDEA 和 FP
- reactjs - 如何导航到不同的屏幕而不在本机反应中显示屏幕
- linux - 无法删除旧的 Docker 网络设置