2017-11-30 3 views
2

저는 OpenCV python과 StackOverflow의 초보자입니다. 실수를 저에게 용서해주십시오. 내 이미지 분류 작업을 위해 Python 3.6과 함께 OpenCV 3.2를 사용하고 있습니다. 내 임무는 프레임에있는 객체를 분류하고 그 프레임에 클래스 레이블을 부여하는 것입니다. 최종 출력 비디오가 다시 쓰여지면 비디오에 삽입 된 텍스트가 중복됩니다. 내 코드는 아래에 있습니다.Opencv 3.2 Python 비디오 쓰기 문제 : 프레임의 텍스트가 겹치기

cap = cv2.VideoCapture(r"D:\python\tank_video\All_vehicle.mp4") 
length = int(cap.get(cv2.CAP_PROP_FRAME_COUNT)) 
currentFrame = 0 

# videowriter object 
codc = int(cap.get(cv2.CAP_PROP_FOURCC)) 
fps = int(cap.get(cv2.CAP_PROP_FPS)) 
w = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH)) 
h = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT)) 

fourcc = cv2.VideoWriter_fourcc(*'XVID') 
out = cv2.VideoWriter('classify_300_200_3.avi', fourcc, 15, (300,200)) 

          "CLASSIFICATION CODE" 

predictions = [classes_names[i] for i in clf.predict(test_features)] 
arr = np.array([]) 

j = 0 
for prediction in predictions: 
    pt = (0, 3 * image.shape[0] // 4) 
    cv2.putText(image, prediction, pt ,cv2.FONT_HERSHEY_SIMPLEX, 2, [0, 255, 
    0], 2) 
    np.append(arr,cv2.imwrite(str(j)+'.jpg',image)) 

out.write(image) 
currentFrame += 1 
cap.release()   
out.release() 
cv2.destroyAllWindows() 

출력 이미지가 첨부되었습니다. this is the screenshot of video output. 정확히 하나의 클래스 레이블을 표시하려고합니다. 이전 프레임의 레이블을 표시하면 안되며 현재 프레임의 레이블을 이전 프레임의 레이블에 덮어 쓰지 않아야합니다. 아무도 내가 그것을 해결할 수 있습니까? 당신은 단지 하나 개의 클래스 레이블을 표시하려면

답변

1

, 다음을 변경해야합니다 : 코드의 조각 이후

for prediction in predictions: 
    pt = (0, 3 * image.shape[0] // 4) 
    cv2.putText(image, prediction, pt ,cv2.FONT_HERSHEY_SIMPLEX, 2, [0, 255, 
    0], 2) 
    np.append(arr,cv2.imwrite(str(j)+'.jpg',image)) 

이미지에 탐지 된 모든 클래스를 작성합니다. 예를 들어 다음과 같이 할 수 있습니다.

# check if at least one class detected 
if len(predictions)>0: 
    # choose to display only the first class 
    prediction = predictions[0] 

    pt = (0, 3 * image.shape[0] // 4) 
    cv2.putText(image, prediction, pt ,cv2.FONT_HERSHEY_SIMPLEX, 2, [0, 255, 
    0], 2) 
    np.append(arr,cv2.imwrite(str(j)+'.jpg',image)) 
+0

이렇게하면 겹치는 텍스트 문제가 해결됩니다. 감사 –