Хобрук: Ваш путь к мастерству в программировании

как я могу ускорить обработку видео: python

import time
import picamera
import picamera.array
import numpy as np
import cv2

clahe = cv2.createCLAHE(clipLimit= 8, tileGridSize=(4,4))

with picamera.PiCamera() as camera:
with picamera.array.PiRGBArray(camera) as stream:
    camera.resolution = (320,240)

    while True:
        camera.capture(stream,'bgr',use_video_port=True)
        med1 = cv2.medianBlur(stream.array,5)
        med3 =clahe.apply(med1)
        img1=med3
        height, width = med3.shape
        for i in range(0,height):
            for j in range(0,width):
                if ((img1[i, j] >= [75,75,75]).all() and (img1[i, j] <[110,110,110]).all()):
                    med3[i,j]= med3[i,j]-8
                elif((img1[i, j] >= [125,125,125]).all() and (img1[i, [140,140,140]).all()):
                    med3[i,j]= med3[i,j]+2
        cv2.imshow('img.jpg',med3)
        cv2.waitKey(100)
        if cv2.waitKey(1) & 0xFF == ord('a'):
            cv2.imwrite('2015_01_05_43.jpg',med2)
            cv2.imwrite('2015_01_05_44.jpg',med3)

        if cv2.waitKey(1) & 0xFF == ord('q'):
            break
        stream.seek(0)
        stream.truncate()

я пытался манипулировать некоторыми пикселями в видео для каждого кадра. Процесс работает. Но выход слишком медленный. Я знаю, что это происходит, потому что он должен сканировать все пиксели для каждого кадра. Может ли кто-нибудь помочь в выполнении того же процесса более быстрым способом. Есть ли другое решение проблемы.


  • 1. Попробуйте разогнать Pi; 2. Попробуйте прочитать/открыть поток камеры, используя OpenCv вместо picamera. 3. Посмотрите, можете ли вы заменить вложенный цикл for предварительно построенной, оптимизированной numpy (например, матричной операцией). 05.01.2015

Ответы:


1

Кажется, что ваш первый выбор должен использовать тот факт, что это массив numpy, и использовать возможности нарезки и вещания numpy вместо итерации по пикселям. Это будет делать то же самое, но на уровне кода numpy c, который оптимизирован для этих вещей. Например, циклы с первым условием можно заменить просто:

img1[(img1 >= [75,75,75]) & (img1 <= [110,110,110])] -= 8
05.01.2015
  • эта линия кажется отличной. но когда я использую, операнды ошибки попадания не могут быть переданы вместе с формами [240,320] (3). 05.01.2015
  • Я не могу знать наверняка, не отлаживая это сам с фактическим объектом. Но в основном он жалуется на структуру img1 (его форму) и структуру [75,75,75]. Вы можете попробовать, например, сравнить его только с 75 и 110. Для других вариантов читайте больше о вещании numpy. 05.01.2015
  • Новые материалы

    Создание успешной организации по науке о данных
    "Рабочие часы" Создание успешной организации по науке о данных Как создать эффективную группу по анализу данных! Введение Это обзорная статья о том, как создать эффективную группу по..

    Технологии и проблемы будущей работы
    Изучение преимуществ и недостатков технологий в образовании В быстро меняющемся мире технологии являются решающим фактором в формировании будущего работы. Многие отрасли уже были..

    Игорь Минар из Google приедет на #ReactiveConf2017
    Мы рады сообщить еще одну замечательную новость: один из самых востребованных спикеров приезжает в Братиславу на ReactiveConf 2017 ! Возможно, нет двух других кланов разработчиков с более..

    Я собираюсь научить вас Python шаг за шагом
    Привет, уважаемый энтузиаст Python! 👋 Готовы погрузиться в мир Python? Сегодня я приготовил для вас кое-что интересное, что сделает ваше путешествие более приятным, чем шарик мороженого в..

    Альтернатива шаблону исходящих сообщений для архитектуры микросервисов
    Познакомьтесь с двухэтапным сообщением В этой статье предлагается альтернативный шаблон для папки Исходящие : двухэтапное сообщение. Он основан не на очереди сообщений, а на..

    React on Rails
    Основное приложение Reverb - это всеми любимый монолит Rails. Он отлично обслуживает наш API и уровень просмотра трафика. По мере роста мы добавляли больше интерактивных элементов..

    Что такое гибкие методологии разработки программного обеспечения
    Что представляют собой гибкие методологии разработки программного обеспечения в 2023 году Agile-методологии разработки программного обеспечения заключаются в следующем: И. Введение A...