Esempio n. 1
0
def objectsRecognition(image, draw=False):
    config, order, mtx, dist, T, distRatio, thresholdValue, objectHeight = configRead(
        'config.json')  # Odczytanie parametrów z pliku konfiguracyjnego

    cnts, points = contoursDetection(
        image,
        draw)  # Wykrywanie konturów na obrazie przekazanym jako argument

    shapes_info = np.empty(shape=(
        0, 4
    ))  # Inicjalizacja tablicy przechowywującej dane o znalezionych obiektach

    # Pętla dla każdego wykrytego obiektu
    for point, cnt in zip(points, cnts):
        color = colorRecognition(image, cnt)  # Wykrycie koloru danego konturu
        # Zapis informacji do talblicy [[X, Y, theta], kolor, pole powierzchnii]
        shapes_info = np.append(shapes_info,
                                [[[point[0], point[1]], point[2], color,
                                  cv.contourArea(cnt) * (distRatio**2)]],
                                axis=0)
        # Funkcje rysujące do przedstawienia informacji o obiektach

    if draw:
        return shapes_info, image
    else:
        return shapes_info
Esempio n. 2
0
def contoursDetection(image, drawContours=False):
    config, order, mtx, dist, T, distRatio, thresholdValue, objectHeight = configRead(
        'config.json')  # Odczytanie parametrów z pliku konfiguracyjnego

    # Preprocessing obrazu
    hsv = cv.cvtColor(image,
                      cv.COLOR_BGR2HSV)  # Zmiana przestrzenii barw obrazu
    h, s, v = cv.split(hsv)  # Rozdzielenie kanałów obrazu na osobne zmienne
    blurred = cv.GaussianBlur(v, (5, 5), 0)  # Rozmycie obrazu
    thresh = cv.threshold(blurred, thresholdValue, 255, cv.THRESH_BINARY)[
        1]  # Binaryzacja obrazu przy użyciu zmiennej z pliku kalibracyjnego
    cv.imshow('thresh', thresh)
    # Wykrywanie konturów na obrazie
    cnts = cv.findContours(thresh.copy(), cv.RETR_EXTERNAL,
                           cv.CHAIN_APPROX_SIMPLE)
    cnts = imutils.grab_contours(cnts)

    # Inicjalizacja tablicy dla punktów centralnych
    center_points = np.empty(shape=(0, 3), dtype=int)

    for c in cnts:
        m = cv.moments(c)  # Obliczenie momentów geometrycznych
        if m["m00"] != 0:
            x = m["m10"] / m["m00"]  # Obliczenie współrzędnej X
            y = m["m01"] / m["m00"]  # Obliczenie współrzędnej Y
            u20 = m['m20'] / m['m00'] - x * x
            u02 = m['m02'] / m['m00'] - y * y
            u11 = m['m11'] / m['m00'] - x * y
            if (u20 - u02) != 0:
                theta = 0.5 * math.atan2(2 * u11, (u20 - u02))
            else:
                theta = 0
        else:
            x = 0
            y = 0
        center_points = np.append(
            center_points, [[x, y, theta]],
            axis=0)  # Dodanie nowych współrzędnych do tablicy

        if drawContours:
            cv.drawContours(image, [c], -1, (0, 0, 255),
                            2)  # Rysowanie konturów na obrazie
            return cnts, center_points, image
        else:
            return cnts, center_points
Esempio n. 3
0
import cvision as cvis
from picamera.array import PiRGBArray
from picamera import PiCamera
from time import sleep
from matplotlib import pyplot as plt
import numpy as np
import json


def nothing(x):
    pass


# Pobranie danych o kamerze, macierzy homografii oraz kolejności podawania elementów
# z pliku konfiguracyjnego, ustawienie wskaźnika element na pierwszą wartość
config, order, mtx, dist, T, distRatio, thresholdValue, objectHeight = cvis.configRead(
    'config.json')

# Początkowe ustawienia kamery
camera = PiCamera()
camera.resolution = (640, 480)
camera.framerate = 30
rawCapture = PiRGBArray(camera, size=(640, 480))
# Zatrzymanie programu aby kamera mogła się uruchomić
sleep(0.1)

scale = 40  # Zmiejszenie obrazu do 40% oryginalnego
width = int(camera.resolution[0] * scale / 100)
height = int(camera.resolution[1] * scale / 100)
dim = (width, 3 * height)  # Nowe wymiary obrazu

fig = plt.figure()  # Inicjalizacja wykresu