1 Вопрос: Построить изогнутую линию на изображении?

вопрос создан в Thu, May 2, 2019 12:00 AM

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

дано: координаты черного пикселя на моем изображении.

ищу: желтый многочлен, который лучше всего подходит к черным пикселям

 введите описание изображения здесь

import cv2
import numpy as np

cv2.imread("foo.jpg")
#search for the black pixels and save the coordinates.

#coordinates of all pixels (example)
x = np.array([0.0, 1.0, 2.0, 3.0,  4.0,  5.0]) 
y = np.array([0.0, 0.8, 0.9, 0.1, -0.8, -1.0]) 
z = np.polyfit(x, y, 2)
p = np.poly1d(z)

Если я все правильно понимаю, теперь я создал многочлен (желтая линия на изображении) с np.poly1d(). Но как я могу нарисовать это на моем bgr_img?

Edit:

пока это мой код:

import cv2
import numpy as np

img = cv2.imread("white_foo.jpg") #1000x1000 pixel

#lets say these are my black pixels in a white image.
x = np.array([122, 224, 210, 350,  380,  250, 490, 623, 711, 819, 900])
y = np.array([536, 480, 390, 366, 270, 240, 180, 210, 280, 400, 501])

#calculate the coefficients.
z = np.polyfit(x, y, 2)
lspace = np.linspace(0, 1000, 100)

#here I want to draw the polynomial which I calculated with polyfit on my image

cv2.imshow("test", img)
cv2.waitKey(0)

Заранее спасибо

    
1
  1. 2019-05-02 15: 13: 43Z
  2. в качестве альтернативы, посмотрите мой ответ на этот вопрос
    2019-05-02 15: 14: 45Z
  3. @ user8190410 Я посмотрел в доки, но не могу нарисовать полином: /
    2019-05-02 15: 20: 42Z
  4. @ warped Я всегда получаю много ошибок ..: /
    2019-05-02 15: 20: 46Z
  5. Вы должны предоставить минимальный, полный, проверяемый пример вашего кода - stackoverflow.com/help/mcve Это означает, что мы должны иметь возможность его запустить. Вы не можете надеяться, что полином 2-й степени будет соответствовать синусоидальной волне.
    2019-05-02 17: 00: 03Z
1 ответ                              1                         

Появился быстрый гугл: https: //docs .opencv.org /2,4 /модули /ядро ​​/DOC /drawing_functions.html # полилинии р>

и это: функция полилиний Opencv в исключении бросков Python

В любом случае вам нужно оценить многочлен в интересующих вас точках, а затем соответствующим образом отформатировать эти точки (полилинии хотят, чтобы они были в контейнере int32, отформатированном как [[x_1, y_1], [x_2, y_2], ... , [x_n, y_n]]). Затем просто вызовите функцию.

draw_x = lspace
draw_y = np.polyval(z, draw_x)   # evaluate the polynomial

draw_points = (np.asarray([draw_x, draw_y]).T).astype(np.int32)   # needs to be int32 and transposed

cv2.polylines(img, [draw_points], False, (0,0,0))  # args: image, points, closed, color

 введите описание изображения здесь

    
0
2019-05-02 18: 25: 18Z
источник размещен Вот