As I said, I am very beginner and I don't understand exactly what I am doing with the threads, but I have to use it and not the timer approach because the final camera will need such implementation.
import cv2
import numpy as np
import pyqtgraph as pg
from pyqtgraph.Qt import QtGui, QtCore
import time
import sys
cap = cv2.VideoCapture(0)
frames = 10
app = QtGui.QApplication([])
average_hue_array = np.empty(frames)
win = pg.GraphicsWindow()
win.setWindowTitle('Real time plotting of the average hue of an image')
p1 = win.addPlot()
plt = pg.plot()
def update(average_hue_array):
plt.plot(average_hue_array, clear=True)
class Reader(pg.QtCore.QThread):
newData = pg.QtCore.Signal(object)
def run(self):
for i in range(0,frames):
global avghue
# Take each frame
_, frame = cap.read()
# Convert BGR to HSV
imghsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)
average_color_per_row = np.average(imghsv, axis=0)
average_color = np.average(average_color_per_row, axis=0)
avghue = average_color.item(0)
average_hue_array[i] = avghue
self.newData.emit(average_hue_array)
time.sleep(0.05)
print("average hue = {}".format(avghue))
k = cv2.waitKey(1) & 0xFF
if k == 27 or k == 'q':
cap.release()
cv2.destroyAllWindows()
sys.exit(0)
thread1 = Reader()
thread1.newData.connect(update)
thread1.start()
########################
I guess it is quite easy to solve and I probably miss something obvious.
Siemovit