Есть задача, нужно с камеры проанализировать равномерность цвета на картинке (картинка bw, есть эталонная яркость и допустимые отклонения вверх/вниз, на тестовом примере разрешение 640 х 480)
В примере кода ниже, я обрабатываю только первый кадр, для того, чтобы убрать задержку получения кадра с камеры, тестировать я могу только на USB вебке, а там FPS от 6 до 20 кадров в секунду
import numpy as np
import cv2
import time
import serial
ttyDev = '/dev/ttyAMA0'
#ttyDev = 0
ttyBourRate = 115200
refBW = 100
limitLight = 10
limitDark = 90
ser = serial.Serial(ttyDev, ttyBourRate, timeout=0) # open first serial port
font = cv2.FONT_ITALIC
cap = cv2.VideoCapture(0)
firstFrame = 1
while(True):
badPixels = 0
if firstFrame == 1:
ret, frame = cap.read()
#height, width = frame.shape[:2]
#frame = cv2.resize(frame,(width/2, height/2), interpolation = cv2.INTER_CUBIC)
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
pixelsArr = np.array(gray)
if firstFrame == 1:
totalPixels = pixelsArr.size
darkPixels = pixelsArr < refBW-limitDark
ligthPixels = pixelsArr > refBW+limitLight
badPixels = np.sum(darkPixels+ligthPixels)
percentageBad = int(round(100*badPixels/totalPixels))
time2 = int(round(time.time() * 1000))
if firstFrame != 1:
delta = time2-time1
#cv2.putText(frame, 'FPS: '+str(round(1000.0*1.0/delta,3)), (20, 40), font, 1, (255, 0, 0), 2)
print str(round(1000.0*1.0/delta,3))
#cv2.putText(frame, 'Bad: '+str(percentageBad), (20, 80), font, 1, (255, 0, 0), 2)
ser.write([percentageBad])
# Display the resulting frame
#cv2.imshow('test',frame)
time1 = int(round(time.time() * 1000))
firstFrame = 0
if cv2.waitKey(20) & 0xFF == ord('q'):
break
# When everything done, release the capture
ser.close()
cap.release()
cv2.destroyAllWindows()
Так вот, банальное получение массива с пикселями которіе не вписіваются в предел яркости дает FPS: 12-18
Может у меня слишком топорный алгоритм подсчета ?