2017-10-05 6 views
0

This is the frame I want to process. Je voulais identifier une ligne dans une image. Bien que je l'ai fait via la détection de Canny Edge, j'ai aussi essayé d'utiliser les coins (en s'attendant à ce que les points couvrent la plupart des lignes). Contre-intuitivement, plus de points sont apparus sur le bruit dans l'image que la ligne réelle. Je me demandais si quelqu'un connaissait une fonction dans OpenCV (Python) pour connecter ces points intelligemment, seulement pour se connecter sur la ligne, et pas le bruit.Identifier une ligne sur une image en utilisant OpenCV

L'aide sera grandement appréciée. I wanted to identify this black line

import cv2 
import numpy as np 

img = cv2.imread('fw1.jpeg') 
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY) 
edges = cv2.Canny(gray,50,150,apertureSize = 3) 
minLineLength = 100 
maxLineGap = 10 
lines = cv2.HoughLinesP(edges,1,np.pi/180,100,minLineLength,maxLineGap) 
for x1,y1,x2,y2 in lines[0]: 
    cv2.line(img,(x1,y1),(x2,y2),(0,255,0),2) 

cv2.imwrite('houghlines5.jpg',img) 
+0

Pouvez-vous s'il vous plaît poster un exemple d'image? –

+0

Merci pour la photo. Pouvez-vous envoyer votre code? Je n'ai aucune idée d'où viennent ces points. La détection de coin essaie de trouver des coins de 90 degrés, pas des bords. Si vous essayez de détecter la ligne noire, pourquoi ne pas essayer la détection des couleurs? [Voir ici par exemple] (http://docs.opencv.org/3.0-beta/doc/py_tutorials/py_imgproc/py_colorspaces/py_colorspaces.html) –

+0

Pardonnez mes connaissances, mais je suis assez nouveau pour OpenCV. Pouvez-vous joindre le lien de détection de couleur dont vous parlez? –

Répondre

0

Je pense que vous devriez augmenter le contraste et se débarrasser du bruit en premier lieu. augmentation de contraste est décrit ici: https://stackoverflow.com/a/46522515/8682088

code de la source ci-dessus:

cv::Mat img = cv::imread("E:\\Workspace\\KS\\excercise\\oBwBH.jpg", 0); 
cv::Mat workingMat; 
cv::GaussianBlur(img, workingMat, cv::Size(101, 101), 31, 31); //high blur to extract background light 
img = img - 0.7*work; //adjust light level 
cv::normalize(img, img, 0, 255, cv::NORM_MINMAX); \\use whole range 
cv::medianBlur(img, img, 5); \\remove noise 
cv::Canny(img, work, 100, 200); \\extract lines; you could do hough lines instead since it has canny inside. 

Après que je suggère à l'aide HoughLines ou HoughLinesP dans la bibliothèque OpenCV.

+1

Bien que ce lien puisse répondre à la question, il est préférable d'inclure les parties essentielles de la réponse ici et fournir le lien pour référence. Les réponses à lien uniquement peuvent devenir invalides si la page liée change. - [De la revue] (/ review/low-quality-posts/17537233) – Aurasphere