Использование opencv для построения пути в лабиринте с помощью камеры Pi

Так что изначально я собирался использовать водораздел и нащупывать свой путь. Я нашел на git решатель лабиринта, который хочу лучше понять и заставить работать с изображением пикамера https://github.com/raincrash/image_processing/blob/master/maze_solver/maze_solver.py

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

import cv2
import numpy as np

i = cv2.imread('img.jpg')

cv2.imshow("Original", i)
cv2.waitKey(0)

# Convert to binary
# Find the contour, draw
# Make a mask and Dilate
# Then, Erode
# Find the difference
# Get the new mask (Solution)
# Merge the images and show

gray_scale = cv2.cvtColor(i, cv2.COLOR_BGR2GRAY)
ret, thresh = cv2.threshold(gray_scale, 127, 255, cv2.THRESH_BINARY_INV)

cv2.imshow("first thresh", thresh)
cv2.waitKey(0)

contours, hierarchy = cv2.findContours(thresh, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_NONE)
cv2.drawContours(thresh, contours, 0, (255, 255, 255), -1)
ret, thresh = cv2.threshold(thresh, 240, 255, cv2.THRESH_BINARY)

cv2.imshow("thresh", thresh)
cv2.waitKey(0)

dilate_mask = np.ones((19, 19), np.uint8)
dilate_result = cv2.dilate(thresh, dilate_mask, iterations = 1)

cv2.imshow("dilate", dilate_result)
cv2.waitKey(0)

erosion_result = cv2.erode(dilate_result, dilate_mask, iterations = 1)

cv2.imshow("erosion", erosion_result)
cv2.waitKey(0)

difference = cv2.absdiff(dilate_result, erosion_result)

cv2.imshow("difference", difference)
cv2.waitKey(0)

b, g, r = cv2.split(i)
mask = difference
result_mask_inverse = cv2.bitwise_not(difference)
r = cv2.bitwise_and(r, r, mask = result_mask_inverse)
g = cv2.bitwise_and(g, g, mask = result_mask_inverse)


result = cv2.merge((b, g, r))
cv2.imshow('solved maze', result)

cv2.waitKey(0)
cv2.destoyAllWindows()

вот изображение, которое я использую

Пи лабиринт

что мне не хватает? разве функция findCountor не должна искать ребра? края слишком неровные, чтобы его можно было найти?


person Community    schedule 29.04.2017    source источник
comment
Можете также добавить картинку, которая показывает (может быть, примерно) конечный результат? А пока проверьте мой ответ здесь: stackoverflow.com/a/43545744/4618605   -  person Glrs    schedule 29.04.2017
comment
привет, спасибо, что вернулся ко мне. возникли кое-какие семейные дела, поэтому я отложил эту попытку на неделю. Я ценю, что ты вернулся ко мне.   -  person    schedule 02.05.2017