我正在尝试在黄色轮廓(出租车)内绘制白色轮廓(汽车的白板),但我什至无法识别HSV中该板的白色,如何解决呢?在代码中,我使用轨迹栏将RGB的值更改为我的自由意志。 谢谢!
import cv2
import numpy as np
kernel = np.ones((5,5),np.uint8)
def dibujarblanco(maskblanco,color):
_,contornos,_=cv2.findContours(maskblanco,
cv2.RETR_LIST,cv2.CHAIN_APPROX_SIMPLE)
for c in contornos:
area = cv2.contourArea(c)
if area > 200:
nuevocontorno = cv2.convexHull(c)
cv2.drawContours(frame, [nuevocontorno], 0, color,3)
def nothing(x):
pass
video = cv2.VideoCapture("taxismenor.mp4")
cv2.namedWindow("Barras Blanco")
cv2.createTrackbar("B", "Barras Blanco", 0, 255, nothing)
cv2.createTrackbar("G", "Barras Blanco", 0, 255, nothing)
cv2.createTrackbar("R", "Barras Blanco", 0, 255, nothing)
while(1):
_, frame=video.read()
hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)
B = cv2.getTrackbarPos("B", "Barras Blanco")
G = cv2.getTrackbarPos("G", "Barras Blanco")
R = cv2.getTrackbarPos("R", "Barras Blanco")
blanco = np.uint8([[[B, G, R]]])
hsvBlanco = cv2.cvtColor(blanco,cv2.COLOR_BGR2HSV)
lowerLimitb = np.uint8([hsvBlanco[0][0][0]-10,100,100])
upperLimitb = np.uint8([hsvBlanco[0][0][0]+10,255,255])
maskblanco = cv2.inRange(hsv, lowerLimitb, upperLimitb)
dibujarblanco(maskblanco,(0,0,255))
cv2.imshow("frame", frame)
cv2.imshow("maskblanco", maskblanco)
key = cv2.waitKey(1)
if key == 27:
break
cv2.destroyAllWindows()
This是尝试印版轮廓为白色的结果。没事,那行不通。
答案 0 :(得分:0)
我想您可以先将轮廓(一个taix)设置为图像背景的颜色,然后复制此图像以检测下一个轮廓。
答案 1 :(得分:0)
您可以使用cv.findContours()提取整个轮廓线层次结构
image, contours, hierarchy = cv.findContours(image, mode, method[, contours[, hierarchy[, offset]]])
层次结构
可选的输出向量(例如std :: vector),其中包含有关图像拓扑的信息。它具有与轮廓数量一样多的元素。对于每个第i个轮廓轮廓[i],元素等级[i] [0],等级[i] [1],等级[i] [2]和等级[i] [3]均设置为0-在相同的层次级别上,基于下一个和上一个轮廓的轮廓的索引,分别是第一个子轮廓和父轮廓。如果对于轮廓i,没有下一个,上一个,父级或嵌套的轮廓,则等级[i]的相应元素将为负。