如何更改检测对象边界框内的矩形颜色和字体颜色

问题描述

我想问一下,当检测到的对象超过一行时,如何更改其边界框和字体的颜色。我目前正在使用Haar-cascade进行人类步行速度估算的项目。该程序的工作方式如下:检测到的物体通过两条假想线,当它通过第二条线时,程序将显示速度。如果检测到的人的速度低于3 km / h,则“边界框”和字体将以红色显示,但是如果速度超过3 km / h,则其将以绿色显示。我希望速度文字显示5秒。

希望您能帮助我解决这个问题。这是我正在研究的程序。

import time

cascade_src = 'haarcascade_fullbody.xml'
video_src = 'video-1.mp4'

#line a
ax1=15
ay=225
ax2=600

#line b
bx1=15
by=275
bx2=600

#car num
i = 1
start_time = time.time()

#video ....
cap = cv2.VideoCapture(video_src)
human_cascade = cv2.CascadeClassifier(cascade_src)   

videoWidth = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))
videoHeight = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))

fourcc = cv2.VideoWriter_fourcc(*'XVID')
out = cv2.VideoWriter('wisuda-14.mp4',fourcc,25.0,(videoWidth,videoHeight))

def Speed_Cal(time):
    try:
        Speed = (9.144*3600)/(time*1000)
        return Speed
    except ZeroDivisionError:
        print (5)

while True:
    ret,img = cap.read()
    if (type(img) == type(None)):
        break
    
    #bluring to have exacter detection
    blurred = cv2.blur(img,ksize=(3,3))
    gray = cv2.cvtColor(blurred,cv2.COLOR_BGR2GRAY)
    human = human_cascade.detectMultiScale(gray,scaleFactor=1.04865,minNeighbors=6)
    
    #line a #i kNow road has got 
    cv2.line(img,(ax1,ay),(ax2,(255,0),2)
    #line b
    cv2.line(img,(bx1,by),(bx2,2)
    
    for (x,y,w,h) in human:
        cv2.rectangle(img,(x,y),(x + w,y + h),(0,255),2)
        roi_blurred = blurred[x: x + h,y:y + w]
        roi_gray = gray[x: x + h,y:y + w]
        roi_img = img[x: x + h,y:y + w]
        cv2.circle(img,(int((x+x+w)/2),int((y+y+h)/2)),2,255,-1)
        #cv2.putText(img,"ID : " + str(i),y-15),cv2.FONT_HERShey_SIMPLEX,0.5,1);
        
        while int(ay) == int((y+y+h)/2):
            start_time = time.time()
            break
            
        while int(ay) <= int((y+y+h)/2):
            if int(by) <= int((y+y+h)/2)&int(by+10) >= int((y+y+h)/2):
                cv2.line(img,2)
                Speed = Speed_Cal(time.time() - start_time)
                print("ID Number "+str(i)+" Speed: " + str(int(Speed)))
                i = i + 1
                cv2.putText(img,"Speed: "+str(int(Speed))+"km/jam",1,2);
                break
            else :        
                break
                
                
    out.write(img)
    cv2.imshow('video',img)
    cv2.imshow('Gray',gray)
    cv2.imshow('Blurr',blurred)
    
    if cv2.waitKey(33) == 27:
        break

cap.release()
out.release()
cv2.destroyAllWindows()

我真的希望你能帮助我。

解决方法

cv2.rectangle(img,(x,y),(x + w,y + h),(0,255),2)具有3个元素的元组:(0,255)对应于边界矩形的RGB(或BGR我忘记了)值,更改值将更改颜色。有关边界矩形的更多信息,请查看OpenCV绘图函数doc:https://docs.opencv.org/2.4/modules/core/doc/drawing_functions.html

对于文本颜色cv2.putText(img,"Speed: "+str(int(Speed))+"km/jam",cv2.FONT_HERSHEY_SIMPLEX,1,(255,0),2),更改元组(255,0)将更改文本颜色。

import time
start = time.time()
sec = 5
while True:
    if condition:
        start = time.time()
    if time.time() - start < sec:
        #do whatever

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...