Подходящие формы дорожной разметки от OpenData
На данный момент я работаю над созданием дорожной разметки от OpenData. Поскольку я новичок в программировании, я использую Python. Я обрабатываю ортофотопланы и преобразую их в бинарные фотографии (только черные и белые пиксели). После этого я получаю такую фотографию:
Следующим шагом является распознавание различной дорожной разметки на данном примере изображения. Я думаю, что это должно быть возможно с помощью "соответствия контекста формы".
Вот я и написал этот код (a
это оригинальная стрелка поворота и b
является извлеченной стрелкой поворота из примера), чтобы сравнить здесь различные стрелки поворота с исходной стрелкой поворота:
import cv2
import numpy as np
# read data
datapath = "/Users/output/test/";
a = cv2.imread(datapath+"template_orig.png",0);
b = cv2.imread(datapath+"template.png",0);
# find contours
ca = cv2.findContours(a, cv2.RETR_CCOMP, cv2.CHAIN_APPROX_TC89_KCOS)
cb = cv2.findContours(b, cv2.RETR_CCOMP, cv2.CHAIN_APPROX_TC89_KCOS)
print(np.shape(ca[0]), np.shape(cb[0]))
# generate distance --> Hausdorff OR ShapeContext
hd = cv2.createHausdorffDistanceExtractor()
sd = cv2.createShapeContextDistanceExtractor()
d1 = hd.computeDistance(ca[0],cb[0])
d2 = sd.computeDistance(ca[0],cb[0])
print d1, " ", d2
Но когда я хочу выполнить свой код, он говорит:
cv2.error: /Users/travis/build/skvark/opencv-python/opencv/modules/shape/src/haus_dis.cpp:139: ошибка: (-215) (set1.channels()==2) && (set1.cols>0) в функции computeDistance
Кроме того, проблема в том, что разрешение "a" составляет: 32 x 131 px, а разрешение "b": 18 x 29 px?
Спасибо за ваши усилия:)
РЕДАКТИРОВАТЬ:
Я изменяю свой код на следующее:
import cv2
import numpy as np
# read data
datapath = "/Users/output/test/";
a = cv2.imread(datapath+"template_orig.png");
b = cv2.imread(datapath+"template.png");
imgray_a = cv2.cvtColor(a,cv2.COLOR_BGR2GRAY)
ret_a,thresh_a = cv2.threshold(imgray_a,127,255,0)
imgray_b = cv2.cvtColor(b,cv2.COLOR_BGR2GRAY)
ret_b,thresh_b = cv2.threshold(imgray_b,127,255,0)
# find contours
_, ca, _ = cv2.findContours(thresh_a, cv2.RETR_CCOMP, cv2.CHAIN_APPROX_SIMPLE)
_, cb, _ = cv2.findContours(thresh_b, cv2.RETR_CCOMP, cv2.CHAIN_APPROX_SIMPLE)
print(np.shape(ca[0]), np.shape(cb[0]))
# generate distance --> Hausdorff OR ShapeContext
hd = cv2.createHausdorffDistanceExtractor()
sd = cv2.createShapeContextDistanceExtractor()
d1 = hd.computeDistance(ca[0],cb[0])
d2 = sd.computeDistance(ca[0],cb[0])
print d1, " ", d2
Результат сравнения a и b: d1 = 28.4604988098, d2 = 0.320339113474
Но когда я сравниваю, например, с с () программа останавливается со следующей ошибкой:
cv2.error: /Users/travis/build/skvark/opencv-python/opencv/modules/core/src/matmul.cpp:1218: ошибка: (-215) type == CV_64FC2 в функции gemmImpl