2017-01-16 10 views
2

У меня возникли проблемы с работой с OpenCV и Python, я новичок в этой технологии. Просто некоторые вопросы, как обрезать изображение после применения преобразования линии Hough?OpenCV - Обрезание изображения после применения преобразования линии Hough

Вот мое изображение. Я хочу обрезать изображение теми, у кого есть красные линии.

enter image description here

Вот мой код для обрезки изображения, и я знаю, что есть что-то не так.

minLineLength = 100 
maxLineGap = 10 
rho = 1 
theta = np.pi/180 
threshold = 190 
lines = cv2.HoughLines(opened, 1, np.pi/180, threshold) 
for line in lines: 
    for rho,theta in line: 
     a = np.cos(theta) 
     b = np.sin(theta) 
     x0 = a*rho 
     y0 = b*rho 
     x1 = int(x0 + 1000*(-b)) 
     y1 = int(y0 + 1000*(a)) 
     x2 = int(x0 - 1000*(-b)) 
     y2 = int(y0 - 1000*(a)) 
     cv2.line(image, (x1, y1), (x2, y2), (255, 0, 0), 2) 
     cropped = image[100:200, 500:640] 

Мне очень нужна ваша помощь, ребята

+0

Можете ли вы загрузить исходное изображение ?? –

+0

Привет @JeruLuke heres оригинальное изображение. [Оригинальное изображение] (https://s24.postimg.org/xvm9oq4xx/test7.jpg) – whaangbuu

ответ

1

Я попробовал все, что мог, но это ближе всего я мог добраться.

Я использовал омографии, чтобы преобразовать изображение следующим образом:

4 угловых точек изображения:
pts_src = np.array([[40.0, 124.0],[1017.0, 169.0],[960.0, 712.0],[60.0,697.0]]) 
4 угловых точек на белом фоне, чтобы быть преобразованы на:
pts_dst = np.array([[0.0, 0.0],[960.0, 0.0],[960.0, 575.0],[0.0, 575.0]]) 
Получить матрицу омографии 'ч':
h, status = cv2.findHomography(pts_src, pts_dst) 
Выполнение перекос преобразования:
im_out = cv2.warpPerspective(img, h, (white.shape[1],white.shape[0])) 
cv2.imwrite("Warped Source Image.jpg", im_out) 

enter image description here

Тогда я выполнил Осторожный край:
grayw = cv2.cvtColor(im_out,cv2.COLOR_BGR2GRAY) 
canny = cv2.Canny(grayw,50,255) 
cv2.imwrite("canny Image.jpg", canny) 

enter image description here

Проведения ваших последующих этапов обнаружения линии с помощью cv2.HoughLines может быть намного проще. Если нет, измените пороговое значение в строке cv2.Canny(grayw,50,255), указанной в коде.

+0

Спасибо @JeruLuke. Я попробую это! – whaangbuu

+0

У вас возникли проблемы с вашим кодом @JeruLuke. Я получил неразрешенную ссылку на '(white.shape [1], white.shape [0])' – whaangbuu

+0

Добавьте эти строки перед этим: 'white = np.zeros ((575, 960, 3), np.uint8)' а затем 'white [:] = (255, 255, 255)' –