Основи обробки зображень на Raspberry Pi
User Rating: / 9
PoorBest 
There are no translations available.

RPi image processingЦей підручник покликаний стати введення в обробку зображень з Raspberry Pi і Python. Ми напишемо сценарій Python, щоб захопити зображення з веб-камери, які потім змінимо і відобразимо.
Пізніше планується розглянути більш складну функціональність, а також використати більше периферійних пристроїв і робота.
Встановлення додаткових пакетів
Спочатку давайте встановимо деякі з програмних пакетів, які нам необхідні, щоб звертатися до зовнішніх пристроїв. В терміналі (Start > Accessories > LXTerminal) (Пуск> Аксесуари> LXTerminal) введіть:
sudo apt-get install python-smbus ipython bluetooth bluez-utils \
python-cwiid python-scipy python-numpy python-pygame \
python-setuptools libsdl-dev
Установка користувальницьких бібліотек
Завантажте користувальницькі бібліотеки RPi.GPIO, I2C і обробки зображень:
wget http://www.cl.cam.ac.uk/projects/raspberrypi/tutorials/robot/resources/RPi.GPIO-0.3.1a.zip
unzip RPi.GPIO-0.3.1a.zip
cd RPi.GPIO-0.3.1a
sudo python setup.py install
cd ..
wget http://www.cl.cam.ac.uk/projects/raspberrypi/tutorials/robot/resources/i2c.py
sudo mv i2c.py /usr/local/lib/python2.7/dist-packages/i2c.py
wget http://www.cl.cam.ac.uk/projects/raspberrypi/tutorials/robot/resources/imgproc.zip
unzip imgproc.zip
cd library
sudo make install
cd ..
Ми повинні завантажувати модулі I2C за замовчуванням, тому видаліть їх з чорного списку, коментуючи (вставте # на початку наступних рядків):
blacklist spi-bcm2708
blacklist i2c-bcm2708
в /etc/modprobe.d/raspi-blacklist.conf. Тоді додайте в /etc/modules:
i2c-bcm2708
spi-bcm2708
i2c-dev
Зробимо, щоб Bluetooth в RPi виявлявся на старті, відкривши /etc/rc.local і додавши
hciconfig hci0 piscan
перед exit 0.
Щоб отримати доступ до i2c з інтерфейсу користувача, додайте себе до групи i2c:
sudo adduser $USER i2c
Захоплення зображення з камери та його редагування
Щоб продовжити урок, запустіть текстовий редактор і створіть новий файл з ім'ям "basic.py"; ми будемо використовувати цей сценарій як випробувальний стенд, щоб спробувати бібліотеку для обробки зображень. Крім того, ви можете використовувати інтерактивне середовище Python для тестування коду, який збираєтесь використати.
Перше, що потрібно зробити для нашого сценарію Python, це імпортувати бібліотеку для обробки зображень, тому введіть:
from imgproc import *
у верхній частині сценарію або в інтерактивній сесії Python. Це завантажує і встановлює бібліотеку читання для використання.
Модуль imgproc надає нам деяку базову функціональність для використання веб-камери, дані доступу зображення та відображення зображення на екрані, а деякі функції обробки зображень більш високого рівня функціональності будемо використовувати пізніше.
Ми почнемо з відкриття пристрою камери. Введіть це наступним, на наступному рядку під оголошенням import
my_camera = Camera(320, 240)
Це відкриває пристрій камери, встановивши розмір відзнятих зображень 320 пікселів в ширину і 240 висотою.
Саме по собі це оголошення не зробить багато чого: ми відкрили камеру, але нічого не реально не зробити з нею, так що давайте захопити зображення з камери і збережемо його:
my_image = my_camera.grabImage()
Тепер у нас є зображення, так як останній крок давайте відображати його на екрані. По-перше, ми повинні відкрити вікно перегляду, а потім ми повинні сказати глядачеві, щоб відобразити зображення ми захопити. Нарешті ми додаємо затримку, щоб дати нам час, щоб побачити зображення (не вимагається від інтерактивній сесії).
# відкрити налаштування вигляду, щоб побачити розміри захопленого зображення
my_view = Viewer(my_image.width, my_image.height, "Основи оброблення зображень")

# вивести зображення на екран
my_view.displayImage(my_image)

# зачекати 5 секунд, щоб ми могли побачити зміни
waitTime(5000)
Ваш повний код повинен виглядати наступним чином:
from imgproc import *

# відкрити веб-камеру
my_camera = Camera(320, 240)
# захопити зображення з камери
my_image = my_camera.grabImage()

# відкрити налаштування вигляду, щоб побачити розміри захопленого зображення
my_view = Viewer(my_image.width, my_image.height, "Основи оброблення зображень")

# вивести зображення на екран
my_view.displayImage(my_image)

# зачекати 5 секунд, щоб ми могли побачити зміни
waitTime(5000)
Тепер запустіть ваш код з терміналу за допомогою команди:
python basic.py
Там буде затримка, поки камера завантажується і захоплює зображення. Після цього ви повинні побачити зображення, яке з'явиться в новому вікні.
Тепер у нас є базова установка і можемо почати працювати з даними зображення.
Дані зображення є 2-х вимірним масивом пікселів, і кожен піксель є кортеж з 3 значень: відносної інтенсивності червоного, зеленого і синього кольорів в діапазоні від 0 до 255 (включно). Ви можете отримати доступ до заданого пікселя зображення шляхом обробки зображення у вигляді масиву, а також шляхом надання позицій х і у пікселя в кортеж.
# Отримати значення пікселя на зображенні з х-координатою 120 і у-координатою 64
pixel = my_image[120, 64]
# піксель тепер є кортеж червоного, зеленого і синього для запитуваного пікселя

# Альтернативний метод
red, green, blue = my_image[120, 64]
# червоний, зелений і синій тепер містять інтенсивність червоного, зеленого і синього кольорів
# відповідних каналів
Щоб встановити значення пікселя, ви призначити 3-и кортежі для координати, будьте обережні, ви можете встановити значення тільки в діапазоні від 0 до 255 (включно).
# встановіть значення пікселя для х-координати 120 і у-координати 64
# для помаранчевого кольору
my_image[120, 64] = 255, 128, 0
Тепер, після використання цієї функціональності, ми знайдемо кожен піксель в зображенні, в якому переважає червоний, і змінимо його на синій. Ось деякий код Python з коментарями, який робить це.
# проходимо через кожен піксель на зображенні за допомогою перебору кожного рядка і кожного стовпця
for x in range(0, my_image.width):
  for y in range(0, my_image.height):
    # отримати значення поточного пікселя
    red, green, blue = my_image[x, y]

    # перевірити, чи інтенсивність червоного перевищує зелений
    if red > green:
      # перевірити, чи червоний також більш інтенсивним, ніж синій
      if red > blue:
      # цей піксель переважно червоний
      # давайте встановимо його в синій
      my_image[x, y] = 0, 0, 255
Для виконання цього коду, помістіть його в сценарії після того як захопили зображення з камери. Переконайтеся, що ви також поставити його перед показом зображення на екрані, в іншому випадку він буде змінений тільки після того, як вже був скопійований на екран.
На цьому закінчимо перший базовий підручник. Тепер ви можете перейти до більш просунутих навчальних посібників, або експериментувати з кодом, який є у вас. Також існує перелік всіх функцій у модулі Python, якщо хочете просто погратися. Інтерактивний інтерпретатор є хорошим способом, щоб ознайомитися з функціями.
Майте на увазі, при доступі до пікселів вам потрібно зображення перед їх використанням спочатку захопити з камери, і, якщо ви встановлюєте колір пікселів, то потрібно згодом відобразити зображення, щоб побачити зміни на екрані.
(За матеріалами EN: cl.cam.ac.uk)
 
>
BookNewsPractice SearchPartnersAbout
Підтримка та дизайн: Могильний С.С. Шаблон: Joomla Templates by BuyHTTP Joomla Hosting