Hough трансформация с открытым CV Python - PullRequest
0 голосов
/ 16 апреля 2019

Я пытаюсь применить грубое вероятностное преобразование в трубе, и у меня уже есть хорошо отфильтрованное изображение (края).

Мне нужно распознать любую из этих прямых (прилагаемая фигура), которые находятся в середине трубки, чтобы я мог определить уровень жидкости, но я не могу этого сделать.Кто-нибудь знает, как я могу решить это?

import cv2
import numpy as np

img = cv2.imread('tube.png')

gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
cv2.imwrite('gray.png',gray)

edges = cv2.Canny(gray,350,720,apertureSize = 3)
cv2.imwrite('edges.png',edges)

minLineLength = 30
maxLineGap = 0

lines = cv2.HoughLinesP(edges,1,np.pi/180,10,minLineLength,maxLineGap)

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

cv2.imwrite('houghlines.png',img)

Мои реальные результаты приведены на прилагаемой фигуре «жесткие линии».Появляется зеленая вертикальная линия, но мне нужна горизонтальная, чтобы я мог определить уровень жидкости.

заранее спасибо.

трубка

края

жесткие линии

Ответы [ 2 ]

0 голосов
/ 24 апреля 2019

Проверьте, что вам нужно, с уважением.

import cv2
import numpy as np
import math


img = cv2.imread('tube.png')
#img = cv2.resize(img,(360,480))

gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
edges = cv2.Canny(gray,350,720, apertureSize = 3)
#cv2.imshow("edges", edges)

rho = 1
#theta = np.pi / 180 #CHANGE FOR MATH.pi/1
threshold = 10  # minimum number of votes (intersections in Hough grid cell)
min_line_length = 2  # minimum number of pixels making up a line
max_line_gap = 480  # maximum gap in pixels between connectable line segments
line_image = np.copy(img) * 0  # creating a blank to draw lines on
lines = cv2.HoughLinesP(edges, rho, math.pi/1, threshold, np.array([]), 
min_line_length, max_line_gap);

#coordinates
dot1 = (lines[0][0][0],lines[0][0][1])
dot2 = (lines[0][0][2],lines[0][0][3])
dot3 = (lines[0][0][1],lines[0][0][1])


cv2.line(img, dot1, dot2, (255,0,0), 3)
cv2.line(img, dot1, dot3, (0,255,0), 3)
cv2.imshow("output", img)


length = lines[0][0][1] - lines[0][0][3]

print ('Pixels Level', length)

if cv2.waitKey(0) & 0xFF == 27:
  cv2.destroyAllWindows()

lines img

клеммный выход

Хорошоудачи.

0 голосов
/ 16 апреля 2019

Я просматривал ваш код и изменил некоторые вещи, и увидел немного документации OpenCV введите описание ссылки здесь .

У меня есть этот результат, я не знаю, еслиэто то, что вам нужно.

import cv2
import numpy as np

img = cv2.imread('tube.png')

gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
cv2.imwrite('gray.png',gray)

edges = cv2.Canny(gray,350,720, apertureSize = 3)
cv2.imwrite('edges.png',edges)

rho = 1  # distance resolution in pixels of the Hough grid
theta = np.pi / 180  # angular resolution in radians of the Hough grid
threshold = 10  # minimum number of votes (intersections in Hough grid cell)
min_line_length = 50  # minimum number of pixels making up a line
max_line_gap = 20  # maximum gap in pixels between connectable line segments
line_image = np.copy(img) * 0  # creating a blank to draw lines on

# Run Hough on edge detected image
# Output "lines" is an array containing endpoints of detected line segments
lines = cv2.HoughLinesP(edges, rho, theta, threshold, np.array([]),
                        min_line_length, max_line_gap)

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

lines_edges = cv2.addWeighted(img, 0.8, line_image, 1, 0)
cv2.imwrite('houghlines.png',lines_edges)

houghlines.png

Найдите похожую проблему здесь введите описание ссылки здесь

Удачи.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...