2014-12-18 3 views
2

Так что я пытаюсь получить hough строки на шахматной доске, но алгоритм приводит к обнаружению только одной строки. Я использую python 2.7 и opencv 3.0. Вот код:Opencv: Hough строки не показаны

def applyHoughLineTransform(): 
    image1 = cv2.imread('pictures/board1.png',0) 
    image2 = cv2.imread('pictures/board2.png',0) 
    image3 = cv2.imread('pictures/board3.png') 
    image4 = cv2.imread('pictures/board4.png') 

    lines1 = cv2.HoughLines(image1,1,math.pi/180.0,5) 
    lines2 = cv2.HoughLines(image2,1,math.pi/180.0,5) 

    lines1 = lines1[0] 
    lines2 = lines2[0] 

    for rho,theta in lines1: 
     print ('Rho and theta:',rho,theta) 
     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)) 

     print (x1,y1) 
     print (x2,y2) 

     cv2.line(image3,(x1,y1),(x2,y2),(0,0,255),2) 

    for rho,theta in lines2: 
     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(image4,(x1,y1),(x2,y2),(0,0,255),2) 

    cv2.imwrite('pictures/board1.png',image1) 
    cv2.imwrite('pictures/board2.png',image2) 

    cv2.imshow('hough line 1',image3) 
    cv2.imshow('hough line 2',image4) 

Вот хитрый край изображения, на котором я выполнить алгоритм поджилки строки: enter image description here

И вот результаты: enter image description here

Как вы можете видеть, довольно хромой , Кажется, что canny алгоритм обеспечивает действительно хорошие края для работы. Я не совсем уверен, что я делаю неправильно. Я полагаю, что это имеет какое-то отношение к аргументам, введенным в функцию houghLines. Если кто-то может указать мне в правильном направлении (или исправить мою проблему полностью :)), я был бы очень признателен. Вот ссылка на сайт учебника, который я использую: http://opencv-python-tutroals.readthedocs.org/en/latest/py_tutorials/py_imgproc/py_houghlines/py_houghlines.html

+0

Я не вижу 'Осторожные()' в вашем коде .. –

+0

это в другой функция, и все в моем основном цикле. Канимый образ, над которым я работаю, выше hough, как указано в моем сообщении – user1243

ответ

6

Исправление этой проблемы состояло в том, чтобы перейти с opencv 3.0 на 2.4. Теперь я получаю все строки, которые я хочу. Извлеченный урок ... он в бета-версии по какой-то причине! Вот результаты: enter image description here

+0

Серьезно? Отмечено ли это где-либо еще в Интернете? –

7

OpenCV 3.1.0

После проверки пример из пакета Это то, что вы должны использовать, чтобы получить его прямо в OpenCV 3.0.0 +

import cv2 
import numpy as np 
import math 

image1 = cv2.imread('img.png') 
gray=cv2.cvtColor(image1,cv2.COLOR_BGR2GRAY) 
dst = cv2.Canny(gray, 50, 200) 

lines= cv2.HoughLines(dst, 1, math.pi/180.0, 100, np.array([]), 0, 0) 
#lines1 = cv2.HoughLines(image1,1,math.pi/180.0,5) 
#lines2 = cv2.HoughLines(image2,1,math.pi/180.0,5) 

#lines1 = lines1[0] 
#lines2 = lines2[0] 

a,b,c = lines.shape 
for i in range(a): 
    rho = lines[i][0][0] 
    theta = lines[i][0][1] 
    a = math.cos(theta) 
    b = math.sin(theta) 
    x0, y0 = a*rho, b*rho 
    pt1 = (int(x0+1000*(-b)), int(y0+1000*(a))) 
    pt2 = (int(x0-1000*(-b)), int(y0-1000*(a))) 
    cv2.line(image1, pt1, pt2, (0, 0, 255), 2, cv2.LINE_AA) 


cv2.imshow('image1',image1) 
cv2.waitKey(0) 
cv2.destoryAllWindows(0) 

ВЫХОД

enter image description here

+0

'cv2.HoughLines (dst, 1, math.pi/180.0, 100, np.array ([]), 0, 0)', что означают эти параметры? – Zara

Смежные вопросы