3

Я использовал преобразование Лапласа в OpenCV для обнаружения края, а затем использовал преобразование линии Hough для обнаружения линий в нем. Эти идентифицированные строки должны быть в конечном итоге удалены из изображения.Hough Line Transform идентифицирует только одну строку, хотя изображение содержит много строк в OpenCV в Python

import cv2 
import numpy as np 
from matplotlib import pyplot as plt 
img = cv2.imread('Feb_16-0.jpg',0) 
kernel = np.ones((1,1),np.uint8) 
opening = cv2.morphologyEx(img, cv2.MORPH_OPEN, kernel) 
blur = cv2.GaussianBlur(opening,(1,1),0) 
ret3,th4 = cv2.threshold(blur,0,255,cv2.THRESH_BINARY+cv2.THRESH_OTSU) 
laplacian = cv2.Laplacian(th4,cv2.CV_8UC1) 
cst = cv2.cvtColor(img,cv2.COLOR_GRAY2BGR) 
minLineLength = 100 
maxLineGap = 10 
lines = cv2.HoughLinesP(laplacian,1,np.pi/180,100,minLineLength,maxLineGap) 
for x1,y1,x2,y2 in lines[0]: 
    cv2.line(cst,(x1,y1),(x2,y2),(0,255,0),2) 

cv2.imwrite('houghlines5.jpg',cst) 

Я ожидаю, чтобы идентифицировать все строки в Bill: Internet Bill

Результаты лапласиана обнаружения края выглядит следующим образом:

The edge detection results

, тогда как результаты, возвращенные Hough Line Transform идентифицирует только одну строку, обозначенную зеленой линией на изображении ниже: Transformed Internet Bill

Может ли кто-нибудь помочь мне разобраться, какие изменения в коде потребуются, чтобы можно было идентифицировать все смелые горизонтальные/вертикальные линии интернет-Билла?

+0

Можете ли вы также добавить результат обнаружения лапласианского края как изображение? Преобразование hough очень чувствительно к параметрам, дальнейшая оптимизация должна выполняться на итерации. –

+0

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

ответ

5

Мне кажется, что вы только читаете первый элемент «линии» в:

for x1,y1,x2,y2 in lines[0]: 
    cv2.line(cst,(x1,y1),(x2,y2),(0,255,0),2) 

Таким образом, вы только рисунок первый (самый значительный) линия, которая была найдена (самый длинный , самый толстый). Я предлагаю вам попробовать:

for line in lines:  
    for x1,y1,x2,y2 in line: 
     cv2.line(cst,(x1,y1),(x2,y2),(0,255,0),2) 

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

+0

Здравствуйте, я получаю эту ошибку при замене строк [0] на строки: для x1, y1, x2, y2 в строках: ValueError: недостаточно значений для распаковки (ожидается 4, получено 1) Я назвал этот код с http: //docs.opencv.org/3.0-beta/doc/py_tutorials/py_imgproc/py_houghlines/py_houghlines.html, поэтому я не уверен, как решить эту ошибку. Я довольно новичок в этом. –

+1

Простите, я исправил его сейчас. –

+0

@ Nikolas Rieble: Не могли бы вы посоветовать мне, как я мог бы дополнительно удалить идентифицированные строки из изображения? Ваша помощь будет оценена по достоинству. :) –