我正在编写代码以从实时视频中提取文本。我编写代码,执行得很好。但问题是它占用了所有帧并且运行缓慢。意味着延迟10秒。是否有任何命令可以杀死过去的帧并使用当前帧进行处理。
import cv2
import numpy as np
import time
import math
from PIL import Image
from pytesseract import image_to_string
cap = cv2.VideoCapture(0)
while(True):
cap.open
ret, img = cap.read()
img = cv2.cvtColor(img, cv2.COLOR_BGR2BGRA)
kernel = np.ones((1, 1), np.uint8)
img = cv2.dilate(img, kernel, iterations=1)
img = cv2.erode(img, kernel, iterations=1)
img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
blur = cv2.GaussianBlur(img,(5,5),0)
ret3,th3 = cv2.threshold(blur,0,255,cv2.THRESH_BINARY+cv2.THRESH_OTSU)
cv2.imshow('frame', th3)
text = image_to_string(th3)
print text
if cv2.waitKey(1) & 0xFF == ord('q'):
out = cv2.imwrite('capture.jpg', frame)
break
cap.release()
cv2.destroyAllWindows()
答案 0 :(得分:0)
不完全是。 VideoCapture的工作原理是为您提供下一个要按顺序处理的帧。如果它很慢,则由您来处理它。
一种常见的解决方案是每隔i帧处理一次。
但您也可以使用以下方法更改每秒帧数: cap.set(cv2.CAP_PROP_FPS,10)