2017-09-18 6 views
0

den followig Code Gegeben:Löschen segmentierten Zeilen (OpenCV, Python)

import numpy as np 
import cv2 

gray = cv2.imread('image.png') 
edges = cv2.Canny(gray,50,150,apertureSize = 3) 
cv2.imwrite('edges-50-150.jpg',edges) 
minLineLength=100 
lines = cv2.HoughLinesP(image=edges,rho=1,theta=np.pi/180, threshold=100,lines=np.array([]), minLineLength=minLineLength,maxLineGap=80) 

a,b,c = lines.shape 
for i in range(a): 
    cv2.line(gray, (lines[i][0][0], lines[i][0][1]), (lines[i][0][2], lines[i][0][3]), (0, 0, 255), 1, cv2.LINE_AA) 
    cv2.imwrite('houghlines.jpg', gray) 
    cv2.imshow('img', gray) 
    cv2.waitKey(0) 

ich die horizontalen Linien erreichen kann, dass es in diesem (Quelle) Bild sind:

src

Dies ist das Ergebnis:

result

Wie kann ich die roten Linien löschen? Was ich erreichen möchte, ist diese Zeilen zu löschen, damit das Bild sauberer und bereit ist, von einem anderen Prozess verwendet zu werden. Der Code wurde von here übernommen.

+1

Chang e die rote Farbe (0, 0, 255) zu weiß (255, 255, 255) –

+0

Hilft ein bisschen. Vielen Dank. Du bist auch gut mit OpenCV? – Link

+0

Ja, ich habe an Computer-Vision und Bildverarbeitung aus den letzten 1,5 Jahren gearbeitet –

Antwort

2

Überprüfen Sie diesen Link http://docs.opencv.org/3.2.0/d1/dee/tutorial_moprh_lines_detection.html und erkennen Sie horizontale Linien. Stellen Sie dann Pixelwerte auf Null, die horizontale Linien enthalten. Gegebener Code ist in C++, aber Sie können ihn leicht in Python umwandeln.

Sie können auch horizontale Linien von Ihren erkannten Linien mit der Neigung von Linien ablehnen. Schließen Sie alle Linien aus, deren Steigung fast gleich Null ist.

Es folgt der Code-Snippet Sie verwenden können (ich wenig Änderungen im Code gemacht basierend auf Steigung und morphologische Schließung):

import numpy as np 
import cv2 

gray = cv2.imread('image.png') 
edges = cv2.Canny(gray,50,150,apertureSize = 3) 
cv2.imwrite('edges-50-150.jpg',edges) 
minLineLength=100 
lines = cv2.HoughLinesP(image=edges,rho=1,theta=np.pi/180, threshold=100,lines=np.array([]), minLineLength=minLineLength,maxLineGap=80) 

a,b,c = lines.shape 
for i in range(a): 
    x = lines[i][0][0] - lines [i][0][2] 
    y = lines[i][0][1] - lines [i][0][3] 
    if x!= 0: 
     if abs(y/x) <1: 
      cv2.line(gray, (lines[i][0][0], lines[i][0][1]), (lines[i][0][2], lines[i][0][3]), (255, 255, 255), 1, cv2.LINE_AA) 

se = cv2.getStructuringElement(cv2.MORPH_ELLIPSE , (3,3)) 
gray = cv2.morphologyEx(gray, cv2.MORPH_CLOSE, se) 
cv2.imwrite('houghlines.jpg', gray) 
cv2.imshow('img', gray) 
cv2.waitKey(0) 

Eingang:

input

Ausgang:

output

+0

Bereits den Code in Python konvertiert verwendet. Es ist [hier] (https://stackoverflow.com/questions/46274961/removing-horizontal-lines-in-image-opencv-pyhton-matplotlib?noredirect=1#comment79515464_46274961) – Link

+0

Ich habe meine Antwort bearbeitet. Wenn Sie mit morphologischen Operationen kein Ergebnis erhalten haben, versuchen Sie, Linien auf der Grundlage der Steigung auszuschließen. – Jazz

+0

Ich habe Code-Snippet zu meiner Antwort hinzugefügt. Wenn Ihr Problem nicht gelöst ist, können Sie dies überprüfen. – Jazz