OpenCV: как вычислить среднее значение шкалы градаций серого и сохранить вывод в текстовый файл - PullRequest
1 голос
/ 17 мая 2019

Я использую библиотеку openCV в Python.Я прочитал в видео и отметил область интереса в нем.Я преобразовал кадр из BGR в оттенки серого, и в пределах области интереса я беру порог для значения 60. Теперь я хочу сделать следующее: вычислить среднее значение интенсивности в области интереса.Сделайте это для каждого кадра видео.А затем запишите результат в текстовый файл.

Вот моя идея:

ROI_intensity = str(cv2.mean(thresh))
file = open("VelocityAnalysis.txt", "a+")
file.write(ROI_intensity)
file.close()

Это, однако, не дает ожидаемого результата: str(cv2.mean(thresh)) возвращает кортеж с 4 (!) Записями, в то время как я ожидал простоодин.Вероятно, это связано с тремя цветными каналами и некоторым последним параметром, который я не знаю, для чего он существует.Возможное исправление

help = str(cv2.mean(thresh))
ROI_intensity = help[0]

Это мне не нравится.Есть ли лучшее решение?

Другая проблема с этим кодом заключается в том, что я хочу, чтобы каждый результат печатался в отдельной строке.И - это, наверное, самая сложная часть для меня - я хочу провести время рядом со значением интенсивности.Видео было снято с частотой 30 кадров в секунду.Так что я должен иметь возможность узнать время видео каждого кадра.Я мог бы просто создать переменную count и предположить, что с каждым кадром счет увеличивается на 1/30 секунды.Но, опять же, есть ли более изощренное решение?

1 Ответ

0 голосов
/ 17 мая 2019

По поводу первой проблемы вы правы.Кортеж 4 представляет среднее из 4 каналов, RGB и альфа соответственно, где альфа обозначает прозрачность (обратите внимание, что это зависит от того, как вы читаете изображение. RGBA или BGRA).Таким образом, запись help[0] в основном записывает среднее значение первого канала.

Что касается второго вопроса, если у вас есть сведения о времени начала записи видео, вы можете получить отметку времени, подобную этой,

timestamp_of_recorded_video = 0
fps = video.get(cv2.CAP_PROP_FPS)
frame_count = 0
while (True) :
     frame, ret = video.read()
     frame_count = frame_count + 1
     current_time_stamp = timestamp_of_recorded_video + (frame_count/fps) #Convert to datetime format as per your convenience
     file.write(str(current_time_stamp) + ',' + str(ROI_intensity) + '\n')

Это для OpenCV3.Используйте библиотеку даты и времени Python для добавления меток времени.

...