Python 2.7,查找numpy. narray的长度



因此,对于我的代码,我正在分析在我的值的阈值内的像素总数。然而,它非常慢,而且这一切都归结为一行代码,基本上是整个程序的瓶颈。这段代码很简单,因为它将数组拆分为值,以便我可以计算长度,但是,它将每秒帧数从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"方法是什么?

我不想要图片本身的大小,也不想要总共有多少张像素。只有在阈值内的像素。

cv2.inRange已经这样做了,所以不需要集合推导式:

调用cv2.inRange后,返回一个二进制掩码,其中白色像素(255)表示落入上限和下限的像素范围和黑色像素(0)没有。

从二进制掩码中,范围内的值可以用:

thresh = cv2.inRange(data, lower, upper)
within_threshold = (thresh == 255).sum()
为了得到像素本身,你可以索引原始的data范围内的二进制掩码:
data = data[thresh == 255]

相关内容

  • 没有找到相关文章

最新更新