Как обнаружить случайно изогнутые непостоянные фиксированные цветные линии на изображении? - PullRequest
0 голосов
/ 22 июня 2019

Я очень новичок в питоне openCV.Я хотел найти 7 фиксированных цветных случайных изогнутых линий на изображении.Результат должен быть логическим, который даст мне, если изображение содержит 7 фиксированных цветных случайно изогнутых линий или нет.Пример входного изображения выглядит следующим образом: Sample Input Image

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

import cv2
import numpy as np

boundaries = [
    (32, 230, 32),   # 2 Green lines
    (10, 230, 230),  # 1 Yellow line
    (230, 72, 32),   # 1  Blue line
    (255, 255, 255), # 2 White lines
    (32, 72, 230)    # 1 Red line
]

box = [(0, 100, 0), (100, 255, 100)]

image = cv2.imread('testImage5.png')

image = removeBlackBands(image)
# cv2.imshow('Cropped Image', image)
# cv2.waitKey(0)

for row in boundaries:
    # create NumPy arrays from the boundaries
    row = np.array(row, dtype="uint8")

    mask = cv2.inRange(image, row, row)
    cv2.GaussianBlur(mask, (5,5), 0)
    cv2.imshow('Filtered', mask)
    cv2.waitKey(0)

    lines = cv2.HoughLinesP(mask, cv2.HOUGH_PROBABILISTIC, np.pi / 180, 50, 50, 100)
    if lines is not None:
        for x in range(0, len(lines)):
            print("line ", x)
            for x1, y1, x2, y2 in lines[x]:
                print("x1 = {}, y1 = {}, x2 = {}, y2 = {}".format(x1, y1, x2, y2))
                cv2.line(image,(x1,y1),(x2,y2),(0,0, 255),2, cv2.LINE_AA)
                pts = np.array([[x1, y1], [x2, y2]], np.int32)
                cv2.polylines(image, [pts], True, (0, 255, 0))

    cv2.imshow('Processed.jpg', image)
    cv2.waitKey(0)

# create NumPy arrays from the boundaries
lower = np.array(box[0], dtype="uint8")
upper = np.array(box[1], dtype="uint8")

# find the colors within the specified boundaries and apply
# the mask
mask = cv2.inRange(image, lower, upper)
output = cv2.bitwise_and(image, image, mask=mask)
output = cv2.cvtColor(output, cv2.COLOR_BGR2GRAY)
output = cv2.Canny(output, 100, 150)
# show the images
# cv2.imshow("output", output)
# cv2.waitKey(0)
cv2.destroyAllWindows()

Может кто-нибудь мне помочь?Заранее спасибо .. !!!

...