如何加快视频处理速度:python 导入时间 进口皮卡梅拉 导入picamera.array 将numpy作为np导入 进口cv2 clahe=cv2.createCLAHE(clipLimit=8,tileGridSize=(4,4)) 使用picamera.picamera()作为摄影机: 以picamera.array.PiRGBArray(摄像头)作为流: 相机分辨率=(320240) 尽管如此: camera.capture(流,'bgr',使用\u video\u port=True) med1=cv2.medianBlur(流数组,5) med3=分类应用(med1) img1=med3 高度、宽度=med3.1形状 对于范围内的i(0,高度): 对于范围(0,宽度)内的j: 如果((img1[i,j]>=[75,75,75]).all()和(img1[i,j]=[125125125]).all()和(img1[i[140140]).all()): med3[i,j]=med3[i,j]+2 cv2.imshow('img.jpg',med3) cv2.等待键(100) 如果cv2.waitKey(1)&0xFF==ord('a'): cv2.imwrite('2015\u 01\u 05\u 43.jpg',med2) cv2.imwrite('2015\u 01\u 05\u 44.jpg',med3) 如果cv2.waitKey(1)&0xFF==ord('q'): 打破 stream.seek(0) stream.truncate()
我试图为每一帧处理视频中的一些像素。该过程正在运行。但输出速度太慢。我知道这是因为它必须扫描每一帧的所有像素。有人能帮助以更快的方式执行相同的过程吗。有没有其他解决方案解决此问题。这似乎是您的第一选择应该使用一个numpy数组,使用numpy的切片和广播功能,而不是通过像素进行迭代。这基本上是相同的,但在numpy的c代码级别,这是针对这些事情进行优化的。 例如,具有第一个条件的循环可以替换为:如何加快视频处理速度:python 导入时间 进口皮卡梅拉 导入picamera.array 将numpy作为np导入 进口cv2 clahe=cv2.createCLAHE(clipLimit=8,tileGridSize=(4,4)) 使用picamera.picamera()作为摄影机: 以picamera.array.PiRGBArray(摄像头)作为流: 相机分辨率=(320240) 尽管如此: camera.capture(流,'bgr',使用\u video\u port=True) med1=cv2.medianBlur(流数组,5) med3=分类应用(med1) img1=med3 高度、宽度=med3.1形状 对于范围内的i(0,高度): 对于范围(0,宽度)内的j: 如果((img1[i,j]>=[75,75,75]).all()和(img1[i,j]=[125125125]).all()和(img1[i[140140]).all()): med3[i,j]=med3[i,j]+2 cv2.imshow('img.jpg',med3) cv2.等待键(100) 如果cv2.waitKey(1)&0xFF==ord('a'): cv2.imwrite('2015\u 01\u 05\u 43.jpg',med2) cv2.imwrite('2015\u 01\u 05\u 44.jpg',med3) 如果cv2.waitKey(1)&0xFF==ord('q'): 打破 stream.seek(0) stream.truncate(),python,video,image-processing,video-streaming,Python,Video,Image Processing,Video Streaming,我试图为每一帧处理视频中的一些像素。该过程正在运行。但输出速度太慢。我知道这是因为它必须扫描每一帧的所有像素。有人能帮助以更快的方式执行相同的过程吗。有没有其他解决方案解决此问题。这似乎是您的第一选择应该使用一个numpy数组,使用numpy的切片和广播功能,而不是通过像素进行迭代。这基本上是相同的,但在numpy的c代码级别,这是针对这些事情进行优化的。 例如,具有第一个条件的循环可以替换为: import time import picamera import picamera.array
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()
img1[(img1>=[75,75,75])&(img1 1.尝试超频Pi;2.尝试使用OpenCv而不是picamera 3.读取/打开摄像头流。看看是否可以用预构建、优化的numpy(例如)矩阵操作替换嵌套的for
循环。这行代码似乎很棒。但当我使用时,它遇到了错误“操作数无法与形状[240320](3)一起广播。如果不亲自调试实际对象,我无法确定。但基本上,它抱怨img1的结构(其形状)和[75,75,75]的结构。”。例如,您可以尝试将其与75和110进行比较。有关其他选项,请阅读有关numpy广播的更多信息。
img1[(img1 >= [75,75,75]) & (img1 <= [110,110,110])] -= 8