【发布时间】:2018-08-17 09:11:41
【问题描述】:
我可以使用下面的代码在框架内找到任何蓝色的东西:
How To Detect Red Color In OpenCV Python?
但是,我想修改代码以在我拥有的视频中查找非常特定的颜色。我从视频文件中读入一帧,并将帧转换为 HSV,然后在特定元素(包含我要检测的颜色)处打印 HSV 值:
print("hsv[x][y]: {}".format(hsv[x][y]))
“hsv”是我使用 cvtColor() 将帧从 BGR 转换为 HSV 后得到的。 上面的打印命令给了我: hsv[x][y]: [108 27 207]
然后我定义我的 HSV 下限和上限,并将其传递给 inRange() 函数:
lowerHSV = np.array([107,26,206])
upperHSV = np.array([109,28,208])
maskHSV = cv2.inRange(hsv, lowerHSV, upperHSV)
我显示 maskHSV,但它似乎无法识别包含该颜色的项目。我尝试扩展 lowerHSV 和 upperHSV 界限,但这似乎也不起作用。 我尝试使用 BGR 进行类似的操作,但这似乎不起作用。
我试图识别的东西可以最好地描述为柠檬酸运动饮料瓶......
任何建议将不胜感激。
================================================ ======
我正在运行的完整 python 代码如下所示,以及一些相关图像...
import cv2
import numpy as np
import time
video_capture = cv2.VideoCapture("conveyorBeltShort.wmv")
xloc = 460
yloc = 60
dCounter = 0
while(1):
dCounter += 1
grabbed, frame = video_capture.read()
if grabbed == False:
break
time.sleep(2)
hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)
lowerBGR = np.array([200,190,180])
upperBGR = np.array([210,200,190])
# HSV [108 27 209] observation
lowerHSV = np.array([105,24,206])
upperHSV = np.array([111,30,212])
maskBGR = cv2.inRange(frame, lowerBGR, upperBGR)
maskHSV = cv2.inRange(hsv, lowerHSV, upperHSV)
cv2.putText(hsv, "HSV:" + str(hsv[xloc][yloc]),(100,280),
cv2.FONT_HERSHEY_SIMPLEX, 3,(0,0,0),8,cv2.LINE_AA)
cv2.putText(frame, "BGR:" + str(frame[xloc][yloc]),(100,480),
cv2.FONT_HERSHEY_SIMPLEX, 3,(0,0,0),8,cv2.LINE_AA)
cv2.rectangle(frame, (0, 0), (xloc-1, yloc-1), (255, 0, 0), 2)
cv2.rectangle(hsv, (0, 0), (xloc-1, yloc-1), (255, 0, 0), 2)
cv2.imwrite("maskHSV-%d.jpg" % dCounter, maskHSV)
cv2.imwrite("maskBGR-%d.jpg" % dCounter, maskBGR)
cv2.imwrite("hsv-%d.jpg" % dCounter, hsv)
cv2.imwrite("frame-%d.jpg" % dCounter, frame)
cv2.imshow('frame',frame)
cv2.imshow('hsv',hsv)
cv2.imshow('maskHSV',maskHSV)
cv2.imshow('maskBGR',maskBGR)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
cv2.destroyAllWindows()
video_capture.release()
================================================ ======
第一张图片是“frame-6.jpg”
第二张图片是“hsv-6.jpg”
第三张图片是“maskHSV-6.jpg”
第四张图片是“maskBGR-6.jpg”
maskHSV-6.jpg 和 maskBGR-6.jpg 似乎没有显示传送带上的柠檬酸橙瓶。我相信我的 HSV/BGR 上下限设置正确...
【问题讨论】:
-
你能提供一些示例图片吗?
-
结构良好的问题,良好的问题空间定义。我建议您添加一些输入和输出图像,因为它可以帮助我们了解您所获得的内容并可能解决具体问题
-
感谢您的反馈。我修改了原始帖子以包含我正在运行的整个 python 代码,以及我得到的图像......如果您需要更多信息,请告诉我。
标签: python opencv machine-learning computer-vision opencv3.1