Робот для duckietown, урок 3: программирование камеры на python

Программа: Запуск камеры и вывод изображения на экран

Пример программы на Python для запуска , настройки камеры, разбивки видеопотока по кадрам, преобразования их в численный массив и вывод изображения на экран.

# импортируем необходимые пакеты , подключаем библиотеки
from picamera.array import PiRGBArray
from picamera import PiCamera
import time
import cv2
 
# инициализируем, настраиваем камеру, захватываем массив данных
camera = PiCamera()
camera.resolution = (640, 480)
camera.rotation = 90
camera.framerate = 32
rawCapture = PiRGBArray(camera, size=(640, 480))
 
# даем камере время нагреться
time.sleep(0.1)
 
# захватываем и обрабатываем каждый кадр из потока
for frame in camera.capture_continuous(rawCapture, format="bgr", use_video_port=True):
    # сохраняем кадр в виде массива
    image = frame.array
 
    # показать кадр в новом окне
    cv2.imshow("Frame", image)
    key = cv2.waitKey(1) & 0xFF
 
    # очищаем поток в ожидании след. кадра
    rawCapture.truncate(0)
 
    # если была нажата клавиа q - закрываем все окна и выходим из цикла
    if key == ord("q"):
        cv2.destroyAllWindows()
        break

Код для распознавания линии

import cv2
# import numpy as np
# import matplotlib.pyplot as plt


def drawCentroid(image, contours, b, g, r):
    cnt = contours[0]
    M = cv2.moments(cnt)
    cx = int(M['m10']/M['m00'])
    cy = int(M['m01']/M['m00'])
    cv2.circle(image, (cx, cy), 5, (b, g, r), -1)
    cv2.putText(image, "centroid", (cx - 25, cy - 25), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (b, g, r), 2)
    cv2.drawContours(image, contours, -1, (b, g, r), 3)


def getContours(image):
    gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)  # convert each frame to grayscale.
    blur = cv2.GaussianBlur(gray, (5, 5), 0)  # blur the grayscale image
    ret, th1 = cv2.threshold(blur, 35, 255, cv2.THRESH_BINARY+cv2.THRESH_OTSU)  # using threshold remove noise
    ret1, th2 = cv2.threshold(th1, 127, 255, cv2.THRESH_BINARY_INV)  # invert the pixe ls of the image frame
    contours, hierarchy = cv2.findContours(th2, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)  # find the contours
    return contours, hierarchy  


cap = cv2.VideoCapture("line_video.mp4")
while(cap.isOpened()):
    _, frame = cap.read()   
    height = frame.shape[0]
    width = frame.shape[1]
    cut = frame[(int(height/3*2)):height, 0:width]
    cut2 = frame[(int(height/3*1)):(int(height/3*2)), 0:width]
    cut3 = frame[0:int(height/3*1), 0:width]

    contours, hierarchy = getContours(cut)
    contours2, hierarchy2 = getContours(cut2)
    contours3, hierarchy3 = getContours(cut3)
 
    drawCentroid(cut, contours, 0, 255, 0)
    drawCentroid(cut2, contours2, 255, 0, 0)
    drawCentroid(cut3, contours3, 0, 0, 255)
 
    cv2.imshow("image", frame)  # show video  
    cv2.waitKey(1)

Полезные ссылки:

  1. Описание библиотеки picamera: https://picamera.readthedocs.io/en/release-1.13/index.html
Один комментарий на “Робот для duckietown, урок 3: программирование камеры на python
  1. [url=https://zithromax250.com/]generic for zithromax[/url] [url=https://chloroquineotc.com/]chloroquine canada[/url] [url=https://quineprox.com/]plaquenil 200 mg price uk[/url]

Добавить комментарий

Ваш e-mail не будет опубликован.