Помимо применения размытия, как уже упоминалось, алгоритм Кэнни предназначен для утончения края. Начав с бинарного образа, вы не действуете в рамках предположений, на которых построен Canny.
Если известно, что ваши изображения являются двоичными, вы можете найти искомое преимущество по искажает изображение, а затем вычитает его из оригинала. Помимо предоставления вам ожидаемого результата, это также может быть быстрее.
С++ используется для создания изображения:
auto image = cv::imread("binary.png", -1);
cv::Mat eroded_image, edge_image;
cv::erode(image, eroded_image, cv::Mat());
edge_image = image - eroded_image;
Или python, как описано на учебной странице OpenCV. (размер ядра отредактирован):
kernel = numpy.ones((3,3), numpyp.uint8)
eroded_image = cv2.erode(image, kernel)

Вы также можете использовать морфологический градиент, описанный в том же уроке, который в основном представляет собой ту же операцию, но вычитание из расширенного изображения вместо исходного. Это обеспечит более толстый край, но его можно считать более «правильным», поскольку он сосредоточен вокруг увеличения интенсивности.
person
buckminst
schedule
17.08.2018