python - 多色对象的 HSV 空间
问题描述
我想检测下面的这个门,最好是整个门。我已经用轨迹栏脚本玩了几个小时,但我只是没有找到合适的色彩空间。我发现其他线程只是跟踪黄色,甚至没有工作。这是我的代码:
def track():
cap = cv2.VideoCapture('../files/sub/gate_mission1.mp4')
while True:
_, frame = cap.read()
cv2.imshow('img', frame)
hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)
lower = np.array([20, 93, 0])
upper = np.array([45, 255, 255])
mask = cv2.inRange(hsv, lower, upper)
contours, _ = cv2.findContours(mask, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
cv2.drawContours(frame, contours, -1, (0, 255, 0), 2)
也许有一种方法可以删除所有的蓝色/绿色,我也不确定?我在这里有什么选择?
解决方案
通过在 Python/OpenCV 的 LAB 颜色空间中设置阈值,这似乎对我有用。根据 Wikipedia 在https://en.wikipedia.org/wiki/CIELAB_color_space “a* 轴相对于绿色-红色的对手颜色,负值指向绿色,正值指向红色。” 所以我们应该为你的绿色和红色得到相当好的分离。
输入:
import cv2
import numpy as np
# load images
img = cv2.imread('gate.jpg')
# convert to LAB
lab = cv2.cvtColor(img, cv2.COLOR_BGR2LAB)
# set black ranges
lower = (130,105,100)
upper = (170,170,160)
# threshold on black
result = cv2.inRange(lab, lower, upper)
# save output
cv2.imwrite('gate_thresh.jpg', result)
# display results
cv2.imshow('thresh',result)
cv2.waitKey(0)
cv2.destroyAllWindows()
阈值图像
推荐阅读
- shell - 如何将 awk 模式作为变量并循环结果?
- java - 堆栈顶部的初始化值是多少
- php - 如何在 laravel 中创建 30 天倒计时
- c++ - 如何为全局命名空间中的类提供 swap()?
- javascript - Determine next map by mapsOrder array
- python - PostgreSQL- ModuleNotFoundError:没有名为“psycopg2”的模块
- c# - 为 Serilog 创建一个包装器
- google-api - 如何在不询问用户身份验证的情况下授权我的应用程序并自动访问我的电子邮件帐户?
- r - 如何在R中导入和合并多个excel文件?
- regex - 如何使用 RegEx 排除符号/字符?