我怎样才能加快视频处理速度:python
how can i speed up video processing : python
import time
import picamera
import picamera.array
import numpy as np
import cv2
clahe = cv2.createCLAHE(clipLimit= 8, tileGridSize=(4,4))
with picamera.PiCamera() as camera:
with picamera.array.PiRGBArray(camera) as stream:
camera.resolution = (320,240)
while True:
camera.capture(stream,'bgr',use_video_port=True)
med1 = cv2.medianBlur(stream.array,5)
med3 =clahe.apply(med1)
img1=med3
height, width = med3.shape
for i in range(0,height):
for j in range(0,width):
if ((img1[i, j] >= [75,75,75]).all() and (img1[i, j] <[110,110,110]).all()):
med3[i,j]= med3[i,j]-8
elif((img1[i, j] >= [125,125,125]).all() and (img1[i, [140,140,140]).all()):
med3[i,j]= med3[i,j]+2
cv2.imshow('img.jpg',med3)
cv2.waitKey(100)
if cv2.waitKey(1) & 0xFF == ord('a'):
cv2.imwrite('2015_01_05_43.jpg',med2)
cv2.imwrite('2015_01_05_44.jpg',med3)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
stream.seek(0)
stream.truncate()
我试图为每一帧操纵视频中的一些像素。该过程正在运行。但是输出太慢了。我知道这是因为它必须扫描每一帧的所有像素。任何人都可以帮助以更快的方式完成相同的过程。有没有其他方法可以解决这个问题。
看来您的第一选择应该是使用 numpy 数组这一事实并使用 numpy 的切片和广播功能,而不是遍历像素。这将做基本相同的事情,但在针对这些事情优化的 numpy 的 c 代码级别。
例如,第一个条件的循环可以替换为:
img1[(img1 >= [75,75,75]) & (img1 <= [110,110,110])] -= 8
import time
import picamera
import picamera.array
import numpy as np
import cv2
clahe = cv2.createCLAHE(clipLimit= 8, tileGridSize=(4,4))
with picamera.PiCamera() as camera:
with picamera.array.PiRGBArray(camera) as stream:
camera.resolution = (320,240)
while True:
camera.capture(stream,'bgr',use_video_port=True)
med1 = cv2.medianBlur(stream.array,5)
med3 =clahe.apply(med1)
img1=med3
height, width = med3.shape
for i in range(0,height):
for j in range(0,width):
if ((img1[i, j] >= [75,75,75]).all() and (img1[i, j] <[110,110,110]).all()):
med3[i,j]= med3[i,j]-8
elif((img1[i, j] >= [125,125,125]).all() and (img1[i, [140,140,140]).all()):
med3[i,j]= med3[i,j]+2
cv2.imshow('img.jpg',med3)
cv2.waitKey(100)
if cv2.waitKey(1) & 0xFF == ord('a'):
cv2.imwrite('2015_01_05_43.jpg',med2)
cv2.imwrite('2015_01_05_44.jpg',med3)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
stream.seek(0)
stream.truncate()
我试图为每一帧操纵视频中的一些像素。该过程正在运行。但是输出太慢了。我知道这是因为它必须扫描每一帧的所有像素。任何人都可以帮助以更快的方式完成相同的过程。有没有其他方法可以解决这个问题。
看来您的第一选择应该是使用 numpy 数组这一事实并使用 numpy 的切片和广播功能,而不是遍历像素。这将做基本相同的事情,但在针对这些事情优化的 numpy 的 c 代码级别。 例如,第一个条件的循环可以替换为:
img1[(img1 >= [75,75,75]) & (img1 <= [110,110,110])] -= 8