【发布时间】:2016-12-20 04:33:02
【问题描述】:
因此,使用我的代码,我正在分析在我的值阈值内的像素总数。但是,它非常慢,而且全部归结为一行代码,基本上是整个程序的瓶颈。这段代码很简单,因为它将数组拆分为多个值,这样我就可以计算长度,但是,它使每秒帧数从 30 下降到大约 4。
import cv2
import numpy as np
import time
from picamera.array import PiRGBArray
from picamera import PiCamera
import RPi.GPIO as GPIO
from PIL import Image
camera = PiCamera()
camera.resolution = (320,240)
rawCapture= PiRGBArray(camera)
for frame in camera.capture_continuous(rawCapture, format='bgr', use_video_port=True):
data= frame.array
lower=np.array([100, %0, 50], dtype='uint8')
upper= np.array([250, 150, 150], dtype="uint8")
thresh= cv2.inRange(data, lower, upper)
data={tuple(item) for item in thresh} # this is the problem line.
len(data)
rawCapture.truncate(0)
FPS=FPS+1
New_time=time.time()-start
if New_time> 10:
print FPS/10, 'fps'
New_time=0
start=time.time()
FPS=0
我觉得问题的一半在于它是一个循环(python 讨厌循环),但我真的不知道如何更改数组。实现这一目标的“pythonic”方式是什么?
【问题讨论】:
-
长度到底是什么意思?在我看来,您正在尝试查找数组中唯一行的数量,准确吗?
-
是的,这是正确的。
-
我想要任何显示出来的东西,但这种方法似乎有效。如果我能得到一个很棒的单个像素,但现在我只是在使用有效的方法。
-
嗯。我对库不熟悉,但如果
hresh= cv2.inRange(data, lower, upper)是一个数组,其中的值来自data,并且在您的范围内,那么您应该可以只使用hresh.shape,不是吗?我仍然不明白为什么它们需要是独一无二的。 -
对不起,
np.unique(thresh).size
标签: python arrays python-2.7 opencv numpy