11. Практическое применение компьютерного зрения
В предыдущей главе мы рассмотрели различные продвинутые концепции компьютерного зрения, такие как морфологические операции и контуры.
Эта глава существует до предыдущих глав, изучая и показывая все компьютерное зрениеконцепцияультиматив Подвести итог。 В этой главе мы реализуем некоторые реальные проекты, используя операции компьютерного зрения, которые мы изучили ранее. Мы также изучим некоторые новые концепции, такие как вычитание фона и расчет оптического потока, а затем продемонстрируем их в небольшом приложении. Эта глава содержит множество практических примеров программирования, а также подробное описание кода и новых функций.
В этой главе мы изучим и продемонстрируем код по следующим темам:
После завершения этой главы вы сможете реализовать концепции, которые вы научились использовать. Raspberry Pi(RPi)и Некоторыйдатчики камеры для создания реалистичных приложенийиспользовать,Например, система безопасности и система обнаружения движения.
Можно найти в GitHub Файлы кода для этой главы можно найти по адресу .
Посмотрите видео ниже,к Проверятьэта страницаначальствоиз“толькосуществоватьосуществлятьизкод”。
Мы знаем, что фильтры разрешают и блокируют сигналы или данные на основе определенных критериев. Давайте вручную напишем код для реализации специального фильтра на основе значения интенсивности цвета пикселя. Это называетсяМаксимальный RGB-фильтр。 существовать Max RGB фильтра, мы сравниваем интенсивность всех цветовых каналов цветного изображения в каждом пикселе.
Затем мы сохраняем максимальную интенсивность канала и уменьшаем интенсивность всех остальных каналов до нуля. Это происходит для каждого пикселя изображения. гипотезадляодинкартинабелый,Интенсивность(30, 200, 120)
。 Затем,существоватьотвечатьиспользовать Максимальный RGB-фильтрназад,это Волядля(0, 200, 0)
。 Давайте посмотрим на тот, который будет использовать NumPy и OpenCV Функция Программа, реализующая эту функциональность:
import cv2
import numpy as np
def maxRGB(img):
b = img[:, :, 0]
g = img[:, :, 1]
r = img[:, :, 2]
M = np.maximum(np.maximum(b, g), r)
b[b < M] = 0
g[g < M] = 0
r[r < M] = 0
return(cv2.merge((b, g, r)))
cap = cv2.VideoCapture(0)
while True:
ret, frame = cap.read()
cv2.imshow('Max RGB Filter', maxRGB(frame))
if cv2.waitKey(1) == 27:
break
cv2.destroyAllWindows()
cap.release()
Запустите предыдущую программу и просмотрите результат. Интересно посмотреть отфильтрованную прямую трансляцию. Вывод следующий:
[Не удалось передать изображение по внешней ссылке. Исходный сайт может иметь механизм защиты от кражи. Рекомендуется сохранить изображение и загрузить его напрямую (img-aMrzZUHy-1681873301183) (https://gitcode.net/apachecn/apachecn-cv). -zh/-/raw /master/docs/raspi-cv-prog/img/B16208_11_01.jpg)]
Рисунок 11.1 – Выход фильтра Max RGB
существуют В следующем разделе мы, Воля, изучим и продемонстрируем вычитание фона из концепции.
Статические камеры используются во многих приложениях, таких как безопасность и наблюдение. Мы можем разделить фон и движущиеся объекты с помощью процесса, называемого вычитанием фона. Обычно возвращается двоичное изображение с фоновым изображением (статической частью сцены) в черных пикселях и движущейся частью (изменяющейся или динамической) в белых пикселях. OpenCV Этого можно добиться с помощью двух алгоритмов. 第одиндаcreateBackgroundSubtractorKNN()
。 Это создаст К ближайший сосед(KNN)Объект вычитания фона。 Тогда мы сможем киспользоватьтон объектаиспользоватьapply()
функцияк Получите маску переднего плана。 Мы можем напрямую отображать маску переднего плана в реальном времени.
Вот демонстрация того, как его использовать:
import cv2
import numpy as np
cap = cv2.VideoCapture(0)
fgbg = cv2.createBackgroundSubtractorKNN()
while(True):
ret, frame = cap.read()
fgmask = fgbg.apply(frame)
cv2.imshow('frame', fgmask)
if cv2.waitKey(30) == 27:
break
cap.release()
cv2.destroyAllWindows()
Результатом является двоичный видеопоток, как показано на следующем снимке экрана. Я машу рукой, которая подсвечена белыми пикселями:
[Не удалось передать изображение по внешней ссылке. Исходный сайт может иметь механизм защиты от кражи. Рекомендуется сохранить изображение и загрузить его напрямую (img-SmKfCDkW-1681873301184) (https://gitcode.net/apachecn/apachecn-cv). -zh/-/raw /master/docs/raspi-cv-prog/img/B16208_11_02.jpg)]
Рисунок 10.2 – Вычитание фона с использованием KNN
Обратите внимание: если вы не использовали его какое-то время, OpenCV будет считаться частью фона и медленно растворяться в выводе.
另один类似изфункциядаcv2.createBackgroundSubtractorMOG2()
。 Это все равно произойдетиспользоватьapply()
функция Создать маску переднего плана。 Вот пример программы, использующей его:
import cv2
import numpy as np
cap = cv2.VideoCapture(0)
fgbg = cv2.createBackgroundSubtractorMOG2()
while(True):
ret, frame = cap.read()
fgmask = fgbg.apply(frame)
cv2.imshow('frame', fgmask)
if cv2.waitKey(30) == 27:
break
cap.release()
cv2.destroyAllWindows()
Запустите предыдущую программу и просмотрите результат. есть в обеих программах,мы все Волясоздаватьfgbg
объект,ииспользоватьapply()
функциярассчитать маску переднего плана,Прямо сейчасfgmask
。 Затем,мы толькодаиспользоватьimshow()
функция Отображение масок переднего плана в реальном времени。 Можно найти См. этот код ожидаемого вывода на предыдущем снимке экрана. Запустите программу и посмотрите результат самостоятельно.
Оптический поток (также известный как оптический поток) — это закономерность, возникающая при движении объектов в видео (в реальном времени или в записи). 注意前一句серединаизПоявлениеслово。 Это означает, что если наблюдатель (камера в нашем примере) находится в движении, объекты в сцене считаются движущимися, даже если они неподвижны. Это называется относительным движением. Проще говоря, оптический поток подчеркивает относительное движение в видео. OpenCV Есть что предложить оптический функция потокового из реализации. cv2.calcOpticalFlowFarneback()
функцияиспользоватьПлотныйметод Рассчитать оптический поток。 Это означает, что он рассчитает расход во всех точках. Эта функция реализует Gunner Farneback алгоритм.
Уведомление:
Дополнительную информацию о параметрах Gunner Farneback можно прочитать по следующему URL-адресу:
http://www.diva-portal.org/smash/get/diva2:273847/FULLTEXT01.pdfTwo-Frame
Давайте посмотрим, как использовать следующий код OpenCV и Python 3 Рассчитать оптический поток:
import cv2
import numpy as np
cap = cv2.VideoCapture(0)
ret, frame1 = cap.read()
prvs = cv2.cvtColor(frame1,
cv2.COLOR_BGR2GRAY)
hsv = np.zeros_like(frame1)
hsv[..., 1] = 255
while(cap):
ret, frame2 = cap.read()
next = cv2.cvtColor(frame2,
cv2.COLOR_BGR2GRAY)
flow = cv2.calcOpticalFlowFarneback(prvs,
next,
None, 0.5,
3, 15,
3, 5,
1.2, 0)
mag, ang = cv2.cartToPolar(flow[..., 0],
flow[..., 1])
hsv[..., 0] = ang * 180/np.pi/2
hsv[..., 2] = cv2.normalize(mag, None, 0,
255, cv2.NORM_MINMAX)
rgb = cv2.cvtColor(hsv, cv2.COLOR_HSV2BGR)
cv2.imshow('Optical Flow', rgb)
if cv2.waitKey(1) == 27:
break
prvs = next
cap.release()
cv2.destroyAllWindows()
существовать Переднийизпрограммасередина, cv2.calcOpticalFlowFarneback()
возвращаться Координаты потока в системе XY (декартовой). Затем,использоватьcv2.cartToPolar()
функция Воля Что转换для极性。 Затем оттенок показывает угол движения, а значение показывает окончательный результат. HSV Интенсивность движения в кадре, которая преобразуется в BGR и отображается как результат. Результат будет выглядеть как на предыдущем скриншоте. Единственное отличие состоит в том, что оптический поток будет представлен разными цветами.
Концепция оптического потока существуетк имеет следующие области:
Давайте создадим один для использования RPi,OpenCV и Python Система обнаружения и отслеживания движения в режиме реального времени. Мы будем использовать очень простые методы для обнаружения движения. По сути, мы рассчитаем источник видео (видеофайл или USB Разница между последовательными кадрами прямой трансляции с веб-камеры). Затем мы Волясуществовать хотим обнаружить различия между последовательными кадрами и нарисовать контуры вокруг воксельной области:
Мы будем импортировать из OpenCV и NumPy начинать. Кроме того, инициализация соответствует USB Объект веб-камеры:
import cv2
import numpy as np
cap = cv2.VideoCapture(0)
Мы применим операцию диффузии к кадрам видео. Для этого нам понадобится ядро. Определите это, прежде чем мы Волясуществовать видеопетлю. Определим это следующим образом:
k = np.ones((3, 3), np.uint8)
захват кода и сохранение последовательных кадров в отдельных переменных:
t0 = cap.read()[1]
t1 = cap.read()[1]
сейчассуществовать,让насдляwhile
Запишите этот блок в цикле。 В этом блоке мы вычисляем абсолютную разницу между кадрами перед их захватом. нас Волядляэтотиспользоватьcv2.absdiff()
функция。 Затем мы конвертируем вычисленные абсолютные разности в оттенки серого для дальнейшей обработки:
while(True):
d=cv2.absdiff(t1, t0)
grey = cv2.cvtColor(d, cv2.COLOR_BGR2GRAY)
Ниже приведен вывод предыдущего кода. Он показывает абсолютную разницу в оттенках серого между последовательно снятыми кадрами:
[Не удалось передать изображение по внешней ссылке. Исходный сайт может иметь механизм защиты от кражи. Рекомендуется сохранить изображение и загрузить его напрямую (img-IFbiNnHs-1681873301184) (https://gitcode.net/apachecn/apachecn-cv). -zh/-/raw /master/docs/raspi-cv-prog/img/B16208_11_03.jpg)]
Рисунок 11.3 – Абсолютная разница между последовательными кадрами
нассуществоватьначальство一步середина计算из Результат:Некоторыйшум。 Поэтому мы должны сначала размыть его, используя технику размытия по Гауссу, чтобы удалить шум:
blur = cv2.GaussianBlur(grey, (3, 3), 0)
Мы используем метод двоичного порога, чтобы преобразовать выходные данные размытия предыдущего шага в двоичное изображение и далее обрабатывать его с помощью следующего кода:
ret, th = cv2.threshold(blur, 15, 255, cv2.THRESH_BINARY)
сейчассуществовать,让нас Воля膨胀形态学操作отвечатьиспользовать При этомдвоичныйкартинакартина。 Это позволяет легко обнаружить границы в пороговых изображениях:
dilated = cv2.dilate(th, k, iterations=2)
Ниже приведен результат операции расширения:
[Не удалось передать изображение по внешней ссылке. Исходный сайт может иметь механизм защиты от кражи. Рекомендуется сохранить изображение и загрузить его напрямую (img-TMLBgIxd-1681873301185) (https://gitcode.net/apachecn/apachecn-). cv-zh/-/raw /master/docs/raspi-cv-prog/img/B16208_11_04.jpg)]
Рисунок 11.4 – Расширенный вывод
Продолжим искать силуэт в существующей зыби картиныкартина:
contours, hierarchy = cv2.findContour(dilated,
cv2.RETR_TREE,
cv2.CHAIN_APPROX_SIMPLE)
t2=t0
cv2.drawContours(t2, contours, -1, (0, 255, 0), 2)
cv2.imshow('Output', t2)
сейчассуществовать,Давайте воля скопируем последний из кадров, чтобы сохранить более старый кадр из переменной.,Затем веб-камера снимает следующий кадр:
t0=t1
t1=cap.read()[1]
当按Вниз键盘начальствоизEsc
Ключевое время,нас结束while
цикл:
if cv2.waitKey(5) == 27 :
break
После завершения цикла мы выполняем обычные задачи очистки, такие как освобождение объекта захвата камеры и уничтожение окна отображения:
cap.release()
cv2.destroyAllWindows()
Ниже приводится результат выполнения программы:
[Не удалось передать изображение по внешней ссылке. Исходный сайт может иметь механизм защиты от кражи. Рекомендуется сохранить изображение и загрузить его напрямую (img-lIWVxnbc-1681873301185) (https://gitcode.net/apachecn/apachecn-cv). -zh/-/raw /master/docs/raspi-cv-prog/img/B16208_11_05.jpg)]
Рисунок 11.5 – Обнаружено и выделено движение
Помните, что этот код существует, рассчитан на большие затраты. не ожидай RPi Старые модели и модели без разгона имеют очень высокую частоту кадров. В качестве упражнения нарисуйте контуры разными цветами. нас还Можетк С помощьюcv2.moments()
функциявычислить центр масс,ииспользовать小圆圈表示это们。 Это сделает результат более интересным.
Штрих-код — это визуальное представление информации, которую легко понять для конкретной машины. Существует множество форматов штрих-кодов. Общий формат имеет параллельные вертикальные линии разной толщины с разным расстоянием между ними.
В этом разделе мы Воля демонстрируем, как обнаружить простой формат параллельных строк в штрих-кодах на статической картинке. Мы будем использовать следующее изображение банки из-под газировки:
[Не удалось передать изображение по внешней ссылке. Исходный сайт может иметь механизм защиты от кражи. Рекомендуется сохранить изображение и загрузить его напрямую (img-fU4VinsU-1681873301185) (https://gitcode.net/apachecn/apachecn-cv). -zh/-/raw /master/docs/raspi-cv-prog/img/B16208_11_06.jpg)]
Рисунок 11.6 – Исходное изображение
Давайте прочитаем исходное изображение банки из-под газировки, используя следующий код:
import numpy as np
import cv2
image=cv2.imread('/home/pi/book/dataset/barcode.jpeg', 1)
input = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
Штрих-код с горизонтальной картинкой карты имеет низкий и высокий вертикальный градиент. Следовательно, изображения-кандидаты должны иметь области, соответствующие этому критерию. нас Воляиспользоватьcv2.Sobel()
функциячтобы рассчитать уровеньивертикальная производная,Затем вычислите разницу к, чтобы найти площадь, удовлетворяющую условиям из. Давайте посмотрим, как это сделать:
hor_der = cv2.Sobel(input, ddepth=-1, dx=1, dy=0, ksize = 5)
ver_der = cv2.Sobel(input, ddepth=-1, dx=0, dy=1, ksize=5)
diff = cv2.subtract(hor_der, ver_der)
OpenCV поставлятьcv2.convertScaleAbs()
функция。 Он преобразует любой массив чисел в 8-битное целое число без знакаизмножество. Давайте использовать его следующим образом:
diff = cv2.convertScaleAbs(diff)
Вывод следующий:
[Не удалось передать изображение по внешней ссылке. Исходный сайт может иметь механизм защиты от кражи. Рекомендуется сохранить изображение и загрузить его напрямую (img-8wzzJHmr-1681873301185) (https://gitcode.net/apachecn/apachecn-cv). -zh/-/raw /master/docs/raspi-cv-prog/img/B16208_11_07.jpg)]
картина 11.7 – горизонтальные и вертикальные Sobel Разница между производными
Переднийиз Результат показывает очень уровеньиочень низкийизвертикальный градиентизобласть。 Давайте применим размытие по Гауссу, чтобы удалить шум из предыдущего вывода. Для этого используйте следующий код:
blur = cv2.GaussianBlur(diff, (3, 3), 0)
Вот вывод приведенного выше кода:
[Внешняя ссылка: передача изображения не удалась,Исходный сайт может иметь механизм защиты от кражи.,Рекомендуется сохранить фильм Волякартина напрямую, загрузив(img-uHxqu9E8-1681873301186)(https://gitcode.net/ apachecn/apachecn-cv-zh/-/raw/master/docs/raspi-cv-prog/img/B16208_11_08.jpg)]
картина 11.8 – После применения размытия по Гауссу
сейчассуществовать,让наспроходить对Чтоотвечатьиспользоватьпорог Воля Что转换длядвоичныйкартинакартина。 Вот код для этого:
ret, th = cv2.threshold(blur, 225, 255, cv2.THRESH_BINARY)
к Вниздавыходдвоичныйкартинакартина:
[Внешняя ссылка: передача изображения не удалась,Исходный сайт может иметь механизм защиты от кражи.,Рекомендуется сохранить фильм Волякартина напрямую, загрузив(img-CEUHsFjV-1681873301186)(https://gitcode.net/ apachecn/apachecn-cv-zh/-/raw/master/docs/raspi-cv-prog/img/B16208_11_09.jpg)]
картина 11.9 –Двоичный выход
Как показано выше,Это дадвоичнаякартинакартина,штрих-код выделени Что他高вертикальный градиентобласть。 Мы можем отобразитькартинак для дальнейшей обработки. Он заполняет пробелы между вертикальными линиями:
dilated = cv2.dilate(th, None, iterations = 10)
Предыдущий результат кодирования содержит множество исходных изображений штрих-кода и других областей, соответствующих прямоугольным полям. Нас интересует регион, дополнительный штрих-код, а не другие регионы:
[Внешняя ссылка: передача изображения не удалась,Исходный сайт может иметь механизм защиты от кражи.,Рекомендуется сохранить фильм Волякартина напрямую, загрузив(img-hBAAzKE3-1681873301186)(https://gitcode.net/ apachecn/apachecn-cv-zh/-/raw/master/docs/raspi-cv-prog/img/B16208_11_10.jpg)]
картина 11.10 – Расширенный двоичный выход
Операция морфологической эрозии устранит большинство других областей, не соответствующих штрих-коду:
eroded = cv2.erode(dilated, None, iterations = 15)
Вот вывод приведенного выше кода:
[Внешняя ссылка: передача изображения не удалась,Исходный сайт может иметь механизм защиты от кражи.,Рекомендуется сохранить фильм Волякартина напрямую, загрузив(img-5Me5B6c4-1681873301186)(https://gitcode.net/ apachecn/apachecn-cv-zh/-/raw/master/docs/raspi-cv-prog/img/B16208_11_011.jpg)]
картина 11.11 –коррозиякартинакартина
让нассуществовать Это рассчитаноиздвоичныйкартинакартинасерединаоказаться所有контуриз списка. Для этого используйте следующий код:
(contours, hierarchy) = cv2.findContours(eroded, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
Максимальный контур и область штрих-кода в двоичной картинке соответствуют контуру. Найдите максимальный профиль в разделе «Кодсуществоватькартинакартина»:
areas = [cv2.contourArea(temp) for temp in contours]
max_index = np.argmax(areas)
largest_contour = contours[max_index]
Давайте использовать OpenCV cv2.boundingRect()
функция Поискмаксимумконтуризограничивающий прямоугольникизкоординировать,Затем нарисуйте этот прямоугольник в существующейкартинакартина:
```py
x, y, width, height = cv2.boundingRect(largest_contour)
```
```py
cv2.rectangle(image, (x, y), (x+width, y+height),(0,255,0), 2)
```
```py
cv2.imshow('Detected Barcode',image)
```
```py
cv2.waitKey(0)
```
```py
cv2.destroyAllWindows()
```
Нарисуйте ограничивающий прямоугольник в соответствующей области максимального контура (штрих-кода из области) в предыдущем исходном кодесуществоватькартинакартина, как показано в следующем выводе:
[Внешняя ссылка: передача изображения не удалась,Исходный сайт может иметь механизм защиты от кражи.,Рекомендуется сохранить фильм «Волякартина» напрямую, загрузив(img-cukzbIYg-1681873301186)(https://gitcode.net/ apachecn/apachecn-cv-zh/-/raw/master/docs/raspi-cv-prog/img/B16208_11_012.jpg)]
картина 11.12 – Обнаружен штрих-код
Как показано на предыдущем скриншоте, общая площадь штрих-кода обведена синим прямоугольником. Один и тот же изкод может не подойти многим картинамкартинам, но подойдет большинству картинкартина. Возможно, нам придется настроить кодек, чтобы обнаружить другие области изображения со штрих-кодами. Возможно, вам придется изменить следующие строки кода для определенных входных данных:
blur = cv2.GaussianBlur(diff, (3, 3), 0)
dilated = cv2.dilate(th, None, iterations = 10)
eroded = cv2.erode(dilated, None, iterations = 15)
На основе этой программы мы можем создать множество практических приложений. Первое приложение — это детектор области штрих-кода для обнаружения живого видео с веб-камеры USB. Еще одно приложение, которое мы можем создать, — это универсальная программа для обнаружения штрих-кодов. Чтобы настроить параметры, передаваемые в функцию, мы можем использовать панель отслеживания.
существовать Вниз一节середина,нас Воляузнать, какиспользовать RPi и USB пропуск на веб-камеру OpenCV и Python 3 Примените хроматическую манипуляцию в стиле кино.
Хромакейинг также называют композицией хромакей. Поскольку мы создаем зеленый или синий эффект с использованием зеленого или синего фона, он широко известен как эффект зеленого или синего экрана. Эту технологию постобработки также можно использовать для создания фотокартинного видео в реальном времени. существует эффект хромакей, мы воля объект или человек помещаем существование на передний план и снимаем картинукартинали кадр. Фоном обычно является зеленая или синяя ткань или стена. Затем мы, Воля, захватили кадры изкартинакартинаили и заменили зеленый или синий кадр другим видео иликартинакартиной. Благодаря этому у зрителя возникает ощущение, что люди и предметы на переднем плане находятся не в том месте, где их снимали в студии. Этот эффект — один из наиболее распространенных эффектов в кинопроизводстве и прогнозе погоды в реальном времени в новостных передачах:
Сначала импортируйте все необходимые библиотеки и запустите объект видеозахвата:
import numpy as np
import cv2
cap = cv2.VideoCapture(0)
для了获得更好из Частота кадровиликадров в секунду(FPS)ставка,нас Воля USB Веб-камеракартинаголоваиз分辨率设置для640x480
картинабелый。 Это приводит к повышению частоты кадров, а эффект зеленого экрана выглядит естественно:
cap.set(3, 640)
cap.set(4, 480)
```**
существования Далее мы читаем Воляиспользовать как фон изкартинакартина. использовать в качестве фона изкартина Картина должна иметь настройки изображения веб-камеры с таким же разрешением, как и разрешение. существоватьэтот种情况Вниз,нас Воля Что设置для640x480
。 Мы знаем, мы Волясуществовать NumPy из Все арифметические и логические операции выполняются над массивом (существовать В данном случае фон картиныкартинаи происходит от подключения к RPi из USB Веб-камера (изображение в реальном времени или кадры) требуют, чтобы массивы операндов имели одинаковый размер. ; В противном случае Питон 3 Интерпретатор выдаст ошибку. Вот код для этого:
bg = cv2.imread('/home/pi/book/dataset/bg.jpg', 1)
Напишем знакомую логику для циклов,и читайте прямую трансляцию кадров с веб-камеры USB.,Как показано ниже:
while True:
ret, frame = cap.read()
В качестве фона для этой презентации мы можем использовать зеленую ткань (например, шторы) и бумагу. Мы также будем RPi Модуль камеры делает кадр объектом на переднем плане. к Внизда оригинальная сцена из фотографий:
[Внешняя ссылка: передача изображения не удалась,Исходный сайт может иметь механизм защиты от кражи.,Рекомендуется сохранить фильм Волякартина напрямую, загрузив(img-bWRbp28x-1681873301187)(https://gitcode.net/ apachecn/apachecn-cv-zh/-/raw/master/docs/raspi-cv-prog/img/B16208_11_013.jpg)]
картина 11.13 – Входное видео
Как мы существуем 6 Как обсуждалось в главе «Цветовые пространства, преобразования и пороги», когда нам нужен цветовой диапазон, HSV Цветовое пространство представляет собой лучший способ представления цветов. Давайте конвертируем Волякартинакартина в HSV цветовое Затем рассчитаем маску для зеленого экрана на заднем плане:
hsv=cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)
image_mask=cv2.inRange(hsv, np.array([40, 50, 50]),
np.array([80, 255, 255]))
Этот Воля вычисляет маску картиныкартинаиз. Зеленый (или любой его оттенок) штрих-картина заменяется цветом, оставшийся штрих изображения заменяется черным:
[Внешняя ссылка: передача изображения не удалась,Исходный сайт может иметь механизм защиты от кражи.,Рекомендуется сохранить фильм Волякартина напрямую, загрузив(img-VSKDkjBT-1681873301187)(https://gitcode.net/ apachecn/apachecn-cv-zh/-/raw/master/docs/raspi-cv-prog/img/B16208_11_014.jpg)]
картина 11.14 – Рассчитать маску
существования вычисляет фон изображениякартина, соответствующий маске после,Мы можем к Воля Эту маску следует использовать в фоновом режиме,кн Воля имеет черный элемент изображения из объекта, скрытого на переднем плане, существует,Как показано ниже:
bg_mask=cv2.bitwise_and(bg, bg, mask=image_mask)
Передний простой изкод Воля белого изображения заменяется простым изкартинакартинакартина, который мы выбираем в качестве фона. кроме того,Соответствующая изкартина переднего плана черная.,Как показано в выводе ниже:
[Внешняя ссылка: передача изображения не удалась,Исходный сайт может иметь механизм защиты от кражи.,Рекомендуется сохранить фильм Волякартина напрямую, загрузив(img-o5KaCMQr-1681873301187)(https://gitcode.net/ apachecn/apachecn-cv-zh/-/raw/master/docs/raspi-cv-prog/img/B16208_11_015.jpg)]
изображение 11.15 – Замените белый элемент изображения в маске фоном.
Теперь существуют, мы должны начать с USB Извлеките передний план из прямой трансляции с веб-камеры. Мы можем сделать это, используя следующий код:
fg_mask=cv2.bitwise_and(frame, frame, mask=cv2.bitwise_not(image_mask))
Передний изкод извлекает все незеленые (или его оттенки) элементы изкартины. Также воля черного цвета назначается и фону (зеленому экрану) соответствующего элемента изкартина:
[Внешняя ссылка: передача изображения не удалась,Исходный сайт может иметь механизм защиты от кражи.,Рекомендуется сохранить фильм Волякартина напрямую, загрузив(img-NP9wFDgR-1681873301187)(https://gitcode.net/ apachecn/apachecn-cv-zh/-/raw/master/docs/raspi-cv-prog/img/B16208_11_016.jpg)]
изображение 11.16 – Замените черный элемент изображения в маске на передний план.
сейчассуществовать,да пора добавить два последних результата нашего расчета. Эта Воляиспользовать пользовательскую картинукартина заменяет зеленый фон.,И создайте эффект хромакей:
cv2.imshow('Output', cv2.add(bg_mask, fg_mask))
if cv2.waitKey(1) == 27:
break
cv2.destroyAllWindows()
cap.release()
Вот окончательный результат:
[Внешняя ссылка: передача изображения не удалась,Исходный сайт может иметь механизм защиты от кражи.,Рекомендуется сохранить фильм Волякартина напрямую, загрузив(img-ci4H5v3j-1681873301188)(https://gitcode.net/ apachecn/apachecn-cv-zh/-/raw/master/docs/raspi-cv-prog/img/B16208_11_017.jpg)]
картина 11.17 – окончательный результат
поздравляю! Мы прошли наше из RPi Коробка модуля камеры и зеленая тряпка создают эффект кинопленки и хромакей. Мы видим, что эффект не идеален. Это связано с неоптимальными световыми эффектами. Веб-камера изображение нет Воля несколько элементов изображения регистрируются как зеленые элементы изображения, а да Воля другие цветные элементы изображения регистрируются. Решением этой проблемы является хорошее и равномерное освещение зеленого фона и объектов переднего плана.
Реализация эффектов хромакей, следуя простым правилам да, мы должны выполнять операции с хромакеем над объектом, и цвет не должен совпадать, и цвет фона экрана, и цвет одинаковы. Таким образом, если мы используем зеленый фон, то объект или никакая его часть не может быть зеленым. То же самое касается экранов с синим фоном.
существуют В этой главе мы научились использовать Мы существуем В предыдущих главах этой книги мы научились использовать изкомпьютерное зрение из концепции и технологии для демонстрации практического применения. Используя метод use, который мы изучили в этой главе, мы можем написать его для создания простого приложения безопасности.
отсейчассуществоватьначинать,Получите знания из экспериментов в этой книге.,нас Можетк Изучите более подробно OpenCV изкартинакартина ручка икомпьютерное зрениеполе。 мы окружаем OpenCV На этом путешествие Куиза заканчивается.
существуют В следующей главе мы, Воля, узнаем, как Python использовать Еще одно мощное, но очень простоеиспользованиеизкомпьютерное зрение Библиотека Mahotas。 Мы также будем Узнать и показать, как использовать Jupyter Блокнот Python 3 изнаукапрограммирование.
В предыдущей главе мы узнали, как использовать функциональность программирования OpenCV и Python 3 в существующем компьютерном мире Raspberry Pi. Практическое применение в области зренияиспользовать и демонстрации.
В этой главе мы, Воля, изучаем еще одно компьютерное зрение Библиотека Mahotas из Основы. Мы также давайте посмотрим на один Jupyter проекты и научитесь Jupyter блокнот для Python 3 программирование. Наше исследование «Волясуществовать» по темам в этой главе заключается в следующем:
Прочитав эту главу, вы привыкнете к использованию Mahotas Выполните обработку изображениякартины. Вы также можете использовать Jupyter Ноутбук работает уверенно Python 3 программа.
Можно найти в GitHub Файлы кода для этой главы можно найти по адресу .
Посмотрите видео ниже,к Проверятьэта страницаначальствоиз“толькосуществоватьосуществлятьизкод”。
Mahotas это Python Библиотека,использовать Вкартинакартинаиметь дело сиикомпьютерное зрение, связанное с задачами. Его создал Луис Педро. Педро), разработанный из.
Это позволяет добиться многих икомпьютерных зрение Связанныйизалгоритм. оно было использовано C++ осознать, и можно найти в NumPy Работайте с массивом. Он также имеет Python 3 из Простой интерфейс.
Mahotas В настоящее время имеет 100 Различныйкартинакартинаиметь дело сикомпьютерное возможностей зрения, и с каждой добавленной версией это число также продолжает расти. Проект находится в активной разработке, новая версия будет выходить каждые несколько месяцев. Помимо добавления функциональности, каждая новая версия приносит улучшения производительности.
Уведомление:
Ты можешькпроходитьдоступэта страницаУзнайте о Mahotas из Подробнее.
Мы можем киспользоватьк Вниз Заказсуществовать Raspberry Pi Установить наmahotas
:
pip3 install mahotas
Mahotas изкомпоненты Воля Установитьсуществовать/home/pi/.local/bin
середина。 Мы можемнавсегда добавлен вPATH
变量середина,Как показано ниже:
проходитьбегатьк Вниз Заказ,к Режим редактирования Открыть~/.profile
документ:
nano ~/.profile
Добавьте в конец следующие строки:
PATH='$PATH:/home/pi/.local/bin'
Перезагрузите Raspberry Pi:
sudo reboot
нас Можеткпроходитьсуществовать Заказпо подсказкебегатьк Вниз Заказпроверитьmahotas
да否已成功Установить:
python3 -c 'import mahotas'
Если эта команда не возвращает ошибок, установка прошла успешно. Теперь существуют, давайте посмотрим на использование Mahotas создавать Некоторыйпрограмма.
Mahotas Имеет множество встроенных картинок. Давайте посмотрим,как их использовать. существовать Вниз面изкодсередина Проверять:
import matplotlib.pyplot as plt
import mahotas
photo = mahotas.demos.load('luispedro')
plt.imshow(photo)
plt.axis('off')
plt.show()
существовать Переднийизкодсередина, mahotas.demos.load()
использовать ВВолявстроенныйкартинакартиназагрузить в NumPy множество. luispedro
да Должен Библиотека作者изкартинакартина。 и OpenCV Разные, Махатас к RGB Формат для чтения и хранения цветной картиныкартина. Мы тоже Можно найти в灰度模式Вниз加载ипоказыватькартинакартина,Как показано ниже:
photo = mahotas.demos.load('luispedro', as_grey=True)
plt.imshow(photo, cmap='gray')
Можем загрузить другие библиотеки,Как показано ниже:
photo = mahotas.demos.load('nuclear')
photo = mahotas.demos.load('lena')
photo = mahotas.demos.load('DepartmentStore')
Мы также можем прочитать хранилище существованиядискизкартинакартина.,Как показано ниже:
photo= mahotas.imread('/home/pi/book/dataset/4.1.01.tiff')
этотфункцияизметод работыиcv2.imread()
OpenCV Функции те же.
Мы уже знаем основы пороговой обработки. нас Можеткпроходитьиспользоватьmahotas
серединапоставлятьизфункцияв оттенки серогокартинакартина进行порогиметь дело с。 Давайте продемонстрируем бинаризацию Оцуки:
import matplotlib.pyplot as plt
import numpy as np
import mahotas
photo = mahotas.demos.load('luispedro', as_grey=True)
photo = photo.astype(np.uint8)
T_otsu = mahotas.otsu(photo)
plt.imshow(photo > T_otsu, cmap='gray')
plt.axis('off')
plt.show()
mahotas.otsu()
функция Принять оттенки серогокартинакартина作для参число,ивозвращатьсяпорог。photo > T_otsu
кодвозвращатьсяпорогкартинакартина。 Следующий вывод:
[Внешняя ссылка: передача изображения не удалась,Исходный сайт может иметь механизм защиты от кражи.,Рекомендуется сохранить фильм Волякартина напрямую, загрузив(img-BmvVbXSb-1681873301188)(https://gitcode.net/ apachecn/apachecn-cv-zh/-/raw/master/docs/raspi-cv-prog/img/B1608_12_001.jpg)]
изображение 12.1 – Бинаризация Оцуки
нас也Можеткиспользовать Riddler-Calvard Метод выполняет пороговую обработку следующим образом:
T_rc = mahotas.rc(photo)
plt.imshow(photo > T_rc, cmap='gray')
mahotas.rc()
функция Принять оттенки серогокартинакартина作для参число,ивозвращатьсяпорог。 photo > T_rc
кодвозвращатьсяпорогкартинакартина。 Запустите эту команду и проверьте вывод. он будет использовать Riddler-Calvard Метод показывает нам порог картиныкартина.
преобразование дальнозорда Морфологическая операция. Лучше использовать двоичный (0 и 1)картина для визуализации. Он преобразует волядвочнуюкартинукартину в полутоновуюкартинукартины, что позволяет использовать интенсивность точки в оттенках серого, чтобы визуализировать ее расстояние от границыкартины. mahotas.distance()
функцияперениматькартинакартинаи计算преобразование расстояния。 Давайте посмотрим на пример:
import matplotlib.pyplot as plt
import numpy as np
import mahotas
f = np.ones((256, 256), bool)
f[64:191, 64:191] = False
plt.subplot(121)
plt.imshow(f, cmap='gray')
plt.title('Original Image')
dmap = mahotas.distance(f)
plt.subplot(122)
plt.imshow(dmap, cmap='gray')
plt.title('Distance Transform')
plt.show()
Это Создатель Квадрат, изготовленный по индивидуальному заказу, представляет собой белый фон, заполненный черным. Затем он вычисляет преобразование расстояние и воля его визуализация. Эта Воля выдает следующий результат:
[Внешняя ссылка: передача изображения не удалась,Исходный сайт может иметь механизм защиты от кражи.,Рекомендуется сохранить фильм Волякартина напрямую, загрузив(img-Lx2qOOP3-1681873301188)(https://gitcode.net/ apachecn/apachecn-cv-zh/-/raw/master/docs/raspi-cv-prog/img/B1608_12_002.jpg)]
картина 12.2 –преобразование расстояния Демо
Мы можем RGB картинакартина转换длязагар,Как показано ниже:
import matplotlib.pyplot as plt
import mahotas
photo = mahotas.demos.load('luispedro')
photo = mahotas.colors.rgb2sepia(photo)
plt.imshow(photo)
plt.axis('off')
plt.show()
Ранее изкод читает картинукартина в градациях серого из библиотеки.,ииспользоватьrgb2sepia()
функцияизнастраиватьиспользовать Воля Что转换для具有загарцветовое пространствоизкартинакартина。 Он принимает картинукартина в качестве аргумента и возвращает преобразованную изкартинакартину. Ниже приведен результат нашей предыдущей программы:
[Внешняя ссылка: передача изображения не удалась,Исходный сайт может иметь механизм защиты от кражи.,Рекомендуется сохранить фильм Волякартина напрямую, загрузив(img-L34p3ZMA-1681873301188)(https://gitcode.net/ apachecn/apachecn-cv-zh/-/raw/master/docs/raspi-cv-prog/img/B1608_12_003.jpg)]
картина 12.3 –загаркартинакартина
существуют В следующем разделе мы Воля узнаем, как использовать United Mahotas, OpenCV и зкод.
картина OpenCV То же, Махотас использовать NumPy Массивы хранят и обрабатывают картинукартина. Мы также можем OpenCV и Mahotas Комбинированный. 让нас Приходить看одинэтот样из Пример,Как показано ниже:
import cv2
import numpy as np
import mahotas as mh
cap = cv2.VideoCapture(0)
while True:
ret, frame = cap.read()
frame = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
T_otsu = mh.otsu(frame)
output = frame > T_otsu
output = output.astype(np.uint8) * 255
cv2.imshow('Output', output)
if cv2.waitKey(1) == 27:
break
cv2.destroyAllWindows()
cap.release()
существует Front изпрограмма, в которой мы с Воля живые кадры преобразуем в версию в оттенках серого. Тогда нам следует использовать двойнойизменятьиз Mahotas Реализация: Воля из кадров из источника живого видео преобразуется в логическую двойнуюкартинакартина. нас需要Воля Что转换дляnp.uint8
тип,Затем Воля Его умножениек255
(Все формы принимаютсяиспользоватьдвоичный 8 Немного из формы),кудобный Воля Чтоиcv2.imshow()
。 Вывод следующий:
[Внешняя ссылка: передача изображения не удалась,Исходный сайт может иметь механизм защиты от кражи.,Рекомендуется сохранить фильм Волякартина напрямую, загрузив(img-7xByv84X-1681873301188)(https://gitcode.net/ apachecn/apachecn-cv-zh/-/raw/master/docs/raspi-cv-prog/img/B1608_12_004.jpg)]
картина 12.4 – Окно вывода из скриншота
нас通常использовать OpenCV Функция из USB Веб-камера считывает прямую трансляцию. Тогда мы сможем киспользовать Mahotas или любая другая библиотека обработки изображенийкартины с функцией обработки кадров. Таким образом, мы можем объединить библиотеки обработки из двух разных картинкартинаизкода.
существуют В следующем разделе мы Воля узнаем о других Некоторые Python картинакартинаобработка библиотеки по имени URL。
Python 3 Существует множество сторонних библиотек. Многие из этих библиотек NumPy Приходитьиметь дело скартинакартина。 Давайте посмотрим на список доступных используемых библиотек:
Они основаны на NumPy библиотека обработки изкартинакартина. Python Библиотека картиныкартина и ее ухоженные филиалы Pillow правильно или неправильно, исходя из NumPy библиотека обработки изкартинакартина. Они также существуют NumPy и PIL Интерфейс для конвертации форматов картинок.
Мы можем создавать различные библиотеки с необходимым функционалом из Доступны различные библиотеки.
В следующей части мы, Воля, исследуем блокнот Jupyter.
Jupyter блокнотдана основе изна основе Web из интерактивного интерфейса, который работает как Python 3 из Интерактивный режим. Юпитер В блокноте есть 40 языки программирования, в том числе Python 3,R,Скала и Джулия. Он обеспечивает интерактивную среду для программирования.,Окружающая среда также может иметь визуализацию,форматированный текст,коды других компонентов.
Jupyter да IPython Проект из филиала. IPython Раздел «Все» и «Независимо от языка» перенесен в Юпитер, в то время как Jupyter из Python Сопутствующие функции предоставляются IPython предоставляется ядром. Посмотрим, как существовать Raspberry Pi Установить на Jupyter:
существовать Заказбыстрыйсередина逐一бегатьк Вниз Заказ:
sudo pip3 uninstall ipykernel
ранееиз Заказ Воляудалитьipykernel
инструментизболее ранняя версия。
к Под Заказ Воля установите все необходимые из библиотек:
sudo pip3 install ipykernel==4.8.0
sudo pip3 install jupyter
sudo pip3 install prompt-toolkit==2.0.5
Эти Заказ Волясуществовать Raspberry Pi Установить на Jupyter инеобходимыйизкомпоненты。
начать Jupyter Ноутбук, пожалуйста, войдите Raspberry Pi среда в форме изкартины (прямо или использовать удаленный рабочий стол),Затемсуществоватьlxterminal
серединабегатьк Вниз Заказ:
jupyter notebook
Это начнется Jupyter Процесс сервера ноутбука и откройте его с помощью Jupyter блокнотинтерфейсиз Web Окно браузера выглядит так:
[Внешняя ссылка: передача изображения не удалась,Исходный сайт может иметь механизм защиты от кражи.,Рекомендую сохранить и напрямую скачать фильм «Волякартинафильм» (img-8ESTWpTu-1681873301189)(https://gitcode.net/apachecn/apachecn-cv-zh/-/raw/master/docs/raspi-cv-prog/img/B1608_12_005. jpg )]
картина 12.5 –Каталог запуска
начальствоодинскриншоткартинапоказывать了бегать Заказкзапускатьиз Оглавлениеиз Структура каталога. ясуществовать Текущая глава/home/pi/book/chapter12
изкод Оглавлениесерединабегать了это。 насбегать Заказиз LXTerminal В окне отображается журнал сервера, как показано ниже:
[Внешняя ссылка: передача изображения не удалась,Исходный сайт может иметь механизм защиты от кражи.,Рекомендуется сохранить фильм Волякартина напрямую, загрузив(img-2QBKEnaN-1681873301189)(https://gitcode.net/ apachecn/apachecn-cv-zh/-/raw/master/docs/raspi-cv-prog/img/B1608_12_006.jpg)]
картина 12.6 – Jupyter Журнал сервера ноутбука
Теперь существуем, давайте Воля вернемся в проект Jupyter из окна браузера. существуют В правом верхнем углу окна браузера есть опции выхода из системы и выхода. существовать Что Вниз方,нас Можетк Видетьзагрузитькнопка,НовыйВниз拉менюки обновить символ。
В правой части существования мы видим три метки. Как мы видели, первый показывает подсказку «Заказ существования» при запуске. Jupyter из Структура каталога. Второй вариант «Карта» отображает текущий активный процесс закупки.
让нас探索右侧изНовыйВниз拉Параметры。 На снимке экрана ниже показаны параметры, доступные в этом меню:
[Внешняя ссылка: передача изображения не удалась,Исходный сайт может иметь механизм защиты от кражи.,Рекомендуется сохранить фильм Волякартина напрямую, загрузив(img-k6OEezFE-1681873301189)(https://gitcode.net/ apachecn/apachecn-cv-zh/-/raw/master/docs/raspi-cv-prog/img/B1608_12_007.jpg)]
картина 12.7 – Создать новое раскрывающееся меню.
существоватьблокнот部分Вниз,нас Можетк Видеть Python 3 из варианта. Если у вас есть использовать Jupyter из любых других языков программирования, то эти языки также будут отображаться здесь. Мы скоро это изучим. Что他Параметрыдатекстовый файл,папкаиТерминал。 другойВнизиз前两个Параметры分别создаватьодин空白документиодин空白Оглавление。 щелкнутьТерминал,Волясуществовать окно браузера из новых опций Карта и запуск LXTerminal, как показано на скриншоте ниже:
[Внешняя ссылка: передача изображения не удалась,Исходный сайт может иметь механизм защиты от кражи.,Рекомендуется сохранить фильм Волякартина напрямую, загрузив(img-VyCx7AFE-1681873301189)(https://gitcode.net/ apachecn/apachecn-cv-zh/-/raw/master/docs/raspi-cv-prog/img/B1608_12_008.jpg)]
картина 12.8 –существовать Web Параметры браузера Картасерединабегатьиз Заказбыстрый
如果насщелкнуть原始Параметры Карта(существовать Параметры браузера Картасередина列дляДомашняя страница),ЗатемсуществоватьбегатьПараметры Вниз进行исследовать,Вы можете увидеть запись, соответствующую текущей опции окна «Из Терминал» Картаиз.,Как показано на скриншоте ниже:
[Внешняя ссылка: передача изображения не удалась,Исходный сайт может иметь механизм защиты от кражи.,Рекомендуется сохранить фильм Волякартина напрямую, загрузив(img-cP8eLTMq-1681873301189)(https://gitcode.net/ apachecn/apachecn-cv-zh/-/raw/master/docs/raspi-cv-prog/img/B1608_12_009.jpg)]
картина 12.9 – Jupyter серединатолькосуществоватьбегатьизподпроцессизсписок
Как мы видим, есть возможность просмотреть текущий блокноти Терминал на этом сервере. Мы можем закрыть их отсюда. Перейти кдокумент,ЗатемсуществоватьНовыйВниз拉меню Вниз,выбирать Python 3。 Это Волясуществовать то же окно браузера из новых опций Карта под Открыть Python 3 блокнот:
[Внешняя ссылка: передача изображения не удалась,Исходный сайт может иметь механизм защиты от кражи.,Рекомендуется сохранить фильм Волякартина напрямую, загрузив(img-c032nkyu-1681873301190)(https://gitcode.net/ apachecn/apachecn-cv-zh/-/raw/master/docs/raspi-cv-prog/img/B1608_12_010.jpg)]
картина 12.10 –новыйиз Jupyter Вкладка «Блокнот»
нас Можетк ВидетьблокнотизимядаUntitled
。 Можем нажать на название, это Воля Открыть модальное диалоговое окно, Переименовать блокнот,Как показано ниже:
[Внешняя ссылка: передача изображения не удалась,Исходный сайт может иметь механизм защиты от кражи.,Рекомендуется сохранить фильм Волякартина напрямую, загрузив(img-qq8svSQz-1681873301190)(https://gitcode.net/ apachecn/apachecn-cv-zh/-/raw/master/docs/raspi-cv-prog/img/B1608_12_011.jpg)]
картина 12.11 Переименовать блокнот
Переименуйте блокнот. 之назад,существоватьДомашняя страницаДомашняя страницасерединаиздокументВниз,нас Можетк Видетьtest01.ipynb
документ。 существоватьздесь,IPYNB представляет собой IPython блокнот. Ты тоже Можно найти вбегатьПараметры Картасередина Видетьодин条目。 существовать/home/pi/book/chapter12/
Оглавлениесередина,нас Можеткоказатьсяtest01.ipynb
документ。 Теперь посмотрим, как будет происходить использование этого документа. Python 3 программирование. сновасуществовать Просматривать器середина切换到test01
Вкладка «Блокнот»。 Изучим интерфейс подробно:
[Внешняя ссылка: передача изображения не удалась,Исходный сайт может иметь механизм защиты от кражи.,Рекомендую сохранить и напрямую скачать фильм «Волякартинафильм» (img-KJ2iTY0T-1681873301190)(https://gitcode.net/apachecn/apachecn-cv-zh/-/raw/master/docs/raspi-cv-prog/img/B1608_12_012. jpg )]
картина 12.12 – Jupyter блокнот
существоватьIn []:
文本之назад,нас Можетк Видетьодин较长из文本область。 Мы можем найти В Напишите здесь код абзаца. убеждатьсяотменюиз Вниз拉менюсерединавыбирать了код。 Затем добавьте следующий Воляккод в текстовую область:
print('Hello World')
нас Можеткпроходитьщелкнутьменю栏серединаизбегатькнопка Приходитьбегатьэто。 Вывод Воля печатается здесь, и Воля появляется в новой текстовой области. Курсор Воля устанавливается здесь автоматически:
[Внешняя ссылка: передача изображения не удалась,Исходный сайт может иметь механизм защиты от кражи.,Рекомендуется сохранить фильм Волякартина напрямую, загрузив(img-IcVfOV3G-1681873301190)(https://gitcode.net/ apachecn/apachecn-cv-zh/-/raw/master/docs/raspi-cv-prog/img/B1608_12_013.jpg)]
картина 12.13 -бегать HelloWorld программа
Самое приятное в этом то, что мы можем редактировать и повторно выполнять предыдущие модули. 让нас尝试了解Менюкартинаотметка:
[Внешняя ссылка: передача изображения не удалась,Исходный сайт может иметь механизм защиты от кражи.,Рекомендуется сохранить фильм Волякартина напрямую, загрузив(img-mkOEanL5-1681873301190)(https://gitcode.net/ apachecn/apachecn-cv-zh/-/raw/master/docs/raspi-cv-prog/img/B1608_12_014.jpg)]
картина 12.14:Менюкартинаотметкакнопка
Пойдем слева направо. Первый символ (дискета) будет сохранен. +
символсуществоватьтекущий突出показыватьизклетка之назад添加один文本областьклетка。 Затем мы вырезаем, копируем и вставляем варианты. Стрелки вверх и вниз используются для перемещения текущей ячейки текстовой области вверх или вниз. Затем,нас有бегатьисередина断内核,перезапустить ядро,Затем重новыйзапускатьибегатьвесьблокноткнопка。 Раскрывающийся список ОК клеткаизтип. Он имеет следующие четыре варианта:
[Внешняя ссылка: передача изображения не удалась,Исходный сайт может иметь механизм защиты от кражи.,Рекомендуется сохранить фильм Волякартина напрямую, загрузив(img-mVGzxgnH-1681873301191)(https://gitcode.net /apachecn/apachecn-cv-zh/-/raw/master/docs/raspi-cv-prog/img/B1608_12_15.jpg)]
картина 12.15 –Тип ячейки
Если вы хотите объединить проекткод,则выбиратькод。 Markdown даиспользовать в RTF из языка разметки. Выберите пустую ячейку текстовой области и измените ее на Markdown тип. Затем,существоватьклеткасередина输入#Test
иосуществлятьэто。 Это создастодин一название уровня,Как показано ниже:
[Внешняя ссылка: передача изображения не удалась,Исходный сайт может иметь механизм защиты от кражи.,Рекомендую сохранить и напрямую скачать фильм «Волякартинафильм» (img-1MiOKlNo-1681873301191) (https://gitcode.net/apachecn/apachecn-cv-zh/-/raw/master/docs/raspi-cv-prog/img/B1608_12_016. jpg )]
картина 12.16 – 1 название уровня
Мы можем##
использовать В第二название уровня,Воля###
использовать В三название уровень и так далее.
Jupyter Одна из главных особенностей блокнотизда, мы даже Можно найти вблокнотсерединабегать OS Заказ. нас需要существовать Заказ Передний加начальство!
символ,Затем Воля Что作длякодсуществоватьклеткасерединабегать。 Давайте посмотрим на этот пример. существоватьблокнотсерединабегать!ls -la
Заказ,Это дает следующие результаты:
[Внешняя ссылка: передача изображения не удалась,Исходный сайт может иметь механизм защиты от кражи.,Рекомендуется сохранить фильм Волякартина напрямую, загрузив(img-5FsQMdtf-1681873301191)(https://gitcode.net/ apachecn/apachecn-cv-zh/-/raw/master/docs/raspi-cv-prog/img/B1608_12_017.jpg)]
картина 12.17 –существовать Jupyter блокнотсерединабегать OS Заказ
Мы тоже Можно найти вблокнотсерединаиспользовать Matplotlib Отображение визуализации икартинакартина. дляэтот,нас需要использоватьмагияиз%matplotlib
функция。 Мы можем киспользовать Воля Matplotlib из бэкэнда установлено значение Jupyter блокнотизв соответствииназад端,Как показано ниже:
%matplotlib inline
Давайте посмотрим на это короткое демо:
[Внешняя ссылка: передача изображения не удалась,Исходный сайт может иметь механизм защиты от кражи.,Рекомендуется сохранить фильм Волякартина напрямую, загрузив(img-8GDjvHgN-1681873301191)(https://gitcode.net/ apachecn/apachecn-cv-zh/-/raw/master/docs/raspi-cv-prog/img/B1608_12_018.jpg)]
картина 12.18 –существовать Jupyter блокнотсерединапоказыватькартинакартина
Вот и вседа Мы можем найти Сам вблокнот отображается в виде визуализации икартинакартинаиз.
Это очень полезная концепция. Мы можем найти ваблокнот использовать Rich Text, Заказ ОС, Python вывод кодов (включая визуализацию). Мы можем даже поделиться ими в электронном виде. IPYNB блокнотдокумент。 Сразукартина Python 3 То же самое, мы можем Jupyter заблокировать множество языков вместе, например. Julia,R и Scala。 Единственное ограничение — мы не можем смешивать несколько языков программирования в одном блокноте.
И последнее, что я хочу объяснить изда, как происходит Прозрачный вывод. щелкнутьклеткаменю。 Это выглядит так:
[Внешняя ссылка: передача изображения не удалась,Исходный сайт может иметь механизм защиты от кражи.,Рекомендуется сохранить фильм «Волякартина» напрямую, загрузив(img-Keu933nd-1681873301191)(https://gitcode.net/ apachecn/apachecn-cv-zh/-/raw/master/docs/raspi-cv-prog/img/B1608_12_019.jpg)]
картина 12.19 –Очистить весь вывод
существоватьтекущий выходиВесь выводВниз都具有ПрозрачныйПараметры。 Эти соответственно Прозрачный ток клетки блокируют весь выходной сигнал.
Рекомендую вам самостоятельно изучить все опции в строке меню.
существуют В этой главе мы исследуем Mahotas из основ, это основано на NumPy библиотека обработки изкартинакартина. Мы изучили особенности обработки Некотораятикартинакартина и научились объединять Mahotas и OpenCV код Выполните обработку изображениякартины. Мы также узнали о других NumPy и не основано на NumPy изкартинакартина управляет библиотекой по имени. Вы можете изучить эти библиотеки дальше.
О последней теме мы узнали изда Jupyter Прототип типа блокнота и обмен кодом в электронном виде очень полезны. сейчассуществовать,многокомпьютерное зрениеи Профессионалы в области обработки данных — Воля Jupyter блокнот для Что Python программные проекты.
существуют. В разделе «Приложения» этой книги я объясняю, что в этой главе невозможно перечислить все темы. Эти темы будут использовать Raspberry Pi для любых целей из-за Воли.
Здесь рассматриваются все темы, не затронутые в основных главах этой книги. В этом приложении в основном собраны темы, включая советы и подсказки. Итак, давайте посмотрим Raspberry Pi,Python 3 и OpenCV О из Советы.
Можно найти в GitHub Файлы кода для этой главы можно найти по адресу .
Посмотрите видео ниже,к Проверятьэта страница начальствоиз“толькосуществоватьосуществлятьизкод”。
OpenCV Есть много оптимизаций и неоптимизаций. Оптимизированное использование современных функций микропроцессора, таких как конвейерная обработка команд и AVX。
нас Можеткисследоватьда否толькосуществоватьиспользоватьcv2.useOptimized()
функциясуществоватьтекущийиспользоватьиз计算机начальство启использовать OpenCV оптимизация. Также мы предлагаем киспользоватьcv2.setUseOptimized()
функцияпереключатьсяоптимизация. cv2.getTickCount()
функциявозвращаться自Открыть计算机назадначинатьиз Количество тактов(也称длятактовый цикл)。 существование выполняет интересующий нас сегмент изкода до и после мелодии, используя эту функцию.
Затем вычисляем тактовый из разницы между циклом и возвратом необходимого изтактового кода для выполнения сегмента кода циклчисло。 cv2.getTickFrequency()
функциявозвращатьсятактовый циклизчастота. Тогда мы сможем к Волятактовый циклмеждуиз Разницактактовый циклизчастота, чтобы получить время, необходимое для выполнения сегмента кода:
import cv2
cv2.setUseOptimized(True)
print(cv2.useOptimized())
img = cv2.imread('/home/pi/book/dataset/4.1.01.tiff', 0)
e1 = cv2.getTickCount()
img1 = cv2.medianBlur(img, 23)
e2 = cv2.getTickCount()
t = (e2 - e1)/cv2.getTickFrequency()
print(t)
Переднийкодиз Вывод следующий:
True
0.004361807
Также мы предлагаем киспользовать Python 3 time
Библиотекасерединаизфункциячтобы подтвердитьбегатьлюбойкодтребуется сегментизвремя。 Попробуйте это в качестве упражнения. Далее мы увидим, как повторно использовать Raspbian OS microSD Карта.
Мы научились использовать Win32 Disk Imager Воля Raspbian запись операционной системы microSD Карта. Теперь существуем, мы, Воля, узнаем, как Воля microSD Карту можно повторно использовать для других целей. Воля microSD карта вставлена microSD Считыватель карт, а затем Воля подключите его к Windows PC。 Это Воля показывает два раздела. Чтосередина只有одиндачитаемыйиз,и且Воля Чтоотметка记длязапускать。 это还отвечать具有config.txt
документ,Что大小约для 250 MB。 Другой раздел не читается. Мы не можем этого сделать microSD Картаиспользовать ВЧто他目из。 因этот,Нам нужно использовать Некоторый инструмент для форматирования карты,Затемталант Воля Чтосноваиспользовать Влюбой Что他目из。
Есть бесплатные инструменты для форматирования SD Карта. нас Можеткотэта страницаВниз载。 Установите этот инструмент и выполните поиск, он отобразит следующее окно. В зависимости от количества дисков на вашем компьютере буква диска может отличаться. к Вниз следует использовать Из Скриншот изображения:
[Внешняя ссылка: передача изображения не удалась,Исходный сайт может иметь механизм защиты от кражи.,Рекомендуется сохранить фильм Волякартина напрямую, загрузив(img-Vv84t5lt-1681873301192)(https://gitcode.net/apa checn/apachecn-cv-zh/-/raw/master/docs/raspi-cv-prog/img/B16208_Appendix_01.jpg)]
картина 13.1 – SD Картаформатпрограмма
Выберите любой диск (он всегда форматирует всю Карту),затем нажмитеформаткнопканачальствоиз。 Этот Воля показывает следующее окно подтверждения:
[Внешняя ссылка: передача изображения не удалась,Исходный сайт может иметь механизм защиты от кражи.,Рекомендуется сохранить фильм Волякартина напрямую, загрузив(img-fQhndJ7G-1681873301192)(https://gitcode.net/apa checn/apachecn-cv-zh/-/raw/master/docs/raspi-cv-prog/img/B16208_Appendix_02.jpg)]
картина 13.2 – Диалог подтверждения
щелкнутьдакнопка,это Воляформат Карта. После формата и того, что Карта соответствует только одной букве диска. Должен Картасейчассуществовать Полныйформатдля,Мы можем Что当作новыйиз Такой жеиспользовать。
мы даже можем найти в Windows серединаиспользоватьУправление дискамиинструмент Приходитьформат microSD Карта. существовать搜索栏середина,Типдиск,ты ВоляоказатьсяСоздать и форматдиска разделПараметры。 Вы также можете выбрать из Windows Найдите этот инструмент в Панели управления. Опять Воля хочешь повторитьиспользуизиз Raspbian OS microSD карта вставлена SD Читатель карт и Воля, которая подключена к Windows компьютер. ОткрытьУправление дискамиинструмент,Вы, Воля, видите следующий скриншот:
[Внешняя ссылка: передача изображения не удалась,Исходный сайт может иметь механизм защиты от кражи.,Рекомендуется сохранить фильм Волякартина напрямую, загрузив(img-2fyq2EXq-1681873301192)(https://gitcode.net/apa checn/apachecn-cv-zh/-/raw/master/docs/raspi-cv-prog/img/B16208_Appendix_03.jpg)]
картина 13.3 – Окно инструмента «Управление дисками»
В этом списке перечислены все диски (съемные диски и несъемные диски), подключенные к системе. Среди них подвижные из (с 256 MB иззапускать Раздел)да microSD Карта. Как видно на скриншоте выше, я вставил его без расширения системы Raspbian OS microSD Карта (я имею в виду да, для которой я написал Raspbian OS,но нетиспользоватьэто Приходитьзапускать Raspberry Pi тарелка). Вот почему отображаются два выделенных раздела и один нераспределенный раздел. 如果тыиспользовать Должен Карта Приходитьзапускать Raspberry Pi доска, то она расширяет систему документов, а второй по величине раздел приходится на нераспределенную часть. 因этот,использовать Проходитьиз Raspbian OS microSD Карта показывает только два раздела. в любом случае,Мы можем щелкнуть правой кнопкой мыши, чтобы назначить раздел,ЗатемвыбиратьУдалить томПараметры。 Сделайте это как для выделений, так и для разделов:
[Внешняя ссылка: передача изображения не удалась,Исходный сайт может иметь механизм защиты от кражи.,Рекомендуется сохранить фильм Волякартина напрямую, загрузив(img-vexJU2OD-1681873301192)(https://gitcode.net/apa checn/apachecn-cv-zh/-/raw/master/docs/raspi-cv-prog/img/B16208_Appendix_04.jpg)]
картина 13.4 -удалить SD Картаиз Раздел
После удаления всех раздач из частей,диск Воля Как показано ниже:
[Внешняя ссылка: передача изображения не удалась,Исходный сайт может иметь механизм защиты от кражи.,Рекомендуется сохранить фильм Волякартина напрямую, загрузив(img-l0O1pLh9-1681873301192)(https://gitcode.net/apa checn/apachecn-cv-zh/-/raw/master/docs/raspi-cv-prog/img/B16208_Appendix_05.jpg)]
картина 13.5 –существовать SD Создать новый раздел на карте
Просто щелкните правой кнопкой мыши и microSD Карта相对отвечатьиздиск,затем нажмитеНовый простой ролл。 Это начнется. использовать Завершите работу мастера со всеми параметрами по умолчанию, и одним щелчком мыши вы получите новый диск для повторного использования. Вы можете переписать Raspbian OS илииспользовать он хранит ваше избранное из MP3 песня. Управление дискамиинструмент使нас Можетклучший контрольдискформати Разделизвсе аспекты。
raspi-config
Заказ行инструментМы можем настроить Raspberry Pi одним из трех способов:
/boot/config.txt
изсодержаниеraspi-config
Заказ行инструментнас Волясуществовать本节середина详细介绍raspi-config
инструментиз。 Открыть Raspberry Pi Оперативный заказ и проект
sudo raspi-config
этот Волясуществовать Заказбыстрыйсередина Открыть Raspberry Pi Инструмент настройки,Как показано на скриншоте ниже:
[Внешняя ссылка: передача изображения не удалась,Исходный сайт может иметь механизм защиты от кражи.,Рекомендуется сохранить фильм Волякартина напрямую, загрузив(img-aFg9DqrN-1681873301192)(https://gitcode.net/apa checn/apachecn-cv-zh/-/raw/master/docs/raspi-cv-prog/img/B16208_Appendix_06.jpg)]
картина 13.6 – raspi-config
инструментизхозяинменю
第один Параметрыиспользовать ВИзменятьpi
использоватьсемьяизпароль。 хозяин Меню第二个ПараметрыПараметры сетиМожетк Изменять Raspberry Pi Плата подключается к сети следующим образом:
[Внешняя ссылка: передача изображения не удалась,Исходный сайт может иметь механизм защиты от кражи.,Рекомендуется сохранить фильм Волякартина напрямую, загрузив(img-fHcmcKYv-1681873301193)(https://gitcode.net/apa checn/apachecn-cv-zh/-/raw/master/docs/raspi-cv-prog/img/B16208_Appendix_07.jpg)]
картина 13.7 – Параметры сети
хозяин Меню第三个Параметры(параметры загрузки)подробно объяснилпараметры загрузки,Как показано ниже:
[Внешняя ссылка: передача изображения не удалась,Исходный сайт может иметь механизм защиты от кражи.,Рекомендуется сохранить фильм Волякартина напрямую, загрузив(img-EhWFgKmL-1681873301193)(https://gitcode.net/apa checn/apachecn-cv-zh/-/raw/master/docs/raspi-cv-prog/img/B16208_Appendix_08.jpg)]
картина 13.8 –Параметры загрузки
хозяин Меню第四个Параметры(Варианты локализации)使Ты можешьк如Вниз设置область设置,часовой пояс,Раскладка клавиатуры и страна/регион Wi-Fi:
[Внешняя ссылка: передача изображения не удалась,Исходный сайт может иметь механизм защиты от кражи.,Рекомендуется сохранить фильм Волякартина напрямую, загрузив(img-SWC50Oud-1681873301193)(https://gitcode.net/apa checn/apachecn-cv-zh/-/raw/master/docs/raspi-cv-prog/img/B16208_Appendix_09.jpg)]
картина 13.9 – Возможности локализации
хозяин Меню第五个ПараметрыдаОпции интерфейса,Отображается следующим образом:
[Внешняя ссылка: передача изображения не удалась,Исходный сайт может иметь механизм защиты от кражи.,Рекомендую сохранить и напрямую скачать фильм «Волякартинафильм» (img-rycy4ZRU-1681873301193) (https://gitcode.net/apachecn/apachecn-cv-zh/-/raw/master/docs/raspi-cv-prog/img/B16208_Appendix_10. jpg )]
картина 13.10 – Опции интерфейса
существует В предыдущем из вариантов мы уже включили его для демо-версии Камера P1,P2 SSH и P3 VNC。
хозяин Меню第六个Параметрыиспользовать В对 Raspberry Pi 1 и Raspberry Pi 2 Разгон. Другие модели необходимо разгонять вручную.
хозяин Меню第七个ПараметрыдаРасширенные параметры,Как показано ниже:
[Внешняя ссылка: передача изображения не удалась,Исходный сайт может иметь механизм защиты от кражи.,Рекомендуется сохранить фильм Волякартина напрямую, загрузив(img-NlQ3HS1a-1681873301193)(https://gitcode.net/apa checn/apachecn-cv-zh/-/raw/master/docs/raspi-cv-prog/img/B16208_Appendix_11.jpg)]
картина 13.11 –Дополнительные параметры
существовать Переднийизскриншоткартинасередина,A1 Расширенная система документовРасширятьдокументсистемакубеждаться microSD Картасуществоватьсерединаиз所有空间均Можетиспользовать。 Раздел памяти A3использовать Вдлякартинавыделять память。
第八个Параметры更новыйraspi-config
инструмент。 Если вы хотите посетить Raspberry Pi плата из Заказ подскажите, то это да конфигурация Raspberry Pi из Лучший способ.
Мы можем найти ви Windows и Linux OS На витрине существуют другие настольные компьютеры, позволяющие учиться во всех областях. Поскольку материнские платы для настольных ПК обычно не имеют DSI порт, так что только и Raspberry Pi Компоненты, связанные с модулем камеры, нельзя использовать вместе с другими компьютерами. Мы тоже Можно найти вбегать Debian или Ubuntu из Примеры запускакода на других одноплатных компьютерах.
существовать Ubuntu,Debian На его производных процесс установки такой же. все современное Linux Дистрибутивы поставляются с Python3。мы только需要использоватьapt
иpip3
инструмент进行Установить。
для Windows ПК, нам нужно установить все с нуля. Давайте начнем с выполнения шагов, чтобы понять, как установить Python 3:
PATH
”флажок。
IDLE
Приходить进行проверять。 кроме того,существоватьcmd
(Windows из Заказбыстрый)середина,нас Можеткпроверятьpython
иpip3
Заказда否только常бегать。
Python 3 Переводчик к Windows двоичный Можетосуществлятьдокументpython.exe
документизформа出сейчас,Если во время установки мы отметили соответствующую опцию,Вы можете напрямую нажать на подсказку «Существующий Заказ» и настроить ее.,как упоминалось ранее。 нас Можеткпроходить Заказбыстрыйначальствоизpip3
инструмент Установить本书Передний各章серединаиспользоватьиз Все пакеты。
Python Реализовать даact как Python программирование языка интерпретатора из программы. эта страницапоставлятьизустный переводчики Linux С изда, называется CPython。 Другие популярные реализации включают (но не ограничиваются):
Мы можем найти вэта страницаоказаться替代извыполнить及Что项目 URL из списка.
Python Дистрибутивда Python Интерпретатор из реализован, и существует набор других пакетов, которые существуют вместе с из. Некоторый Python Сама реализация да Дистрибутив. 实际начальство,терминвыполнитьи分发между没有明确изразница。 Мы можем найти вэта страницаначальствооказаться有关Дистрибутивиз Подробнее.