У меня есть такое изображение с грубыми горизонтальными линиями, и я хочу удалить его или, по крайней мере, сделать эти линии невидимыми.
Используя технику сглаживания, такую как Gaussian Blur, я не смог получить удовлетворительный результат, поскольку линии все еще видны, и это просто снижает разрешение изображения.
cv::GaussianBlur(image, result, cv::Size(5, 5), 3);
Есть ли другой метод, более подходящий для моей проблемы? Спасибо
@generic_opto_guy горизонтальная линия, я отредактирую свой вопрос, спасибо. Как размыть только по вертикали?
@gameon67 Вы можете изменить размер ядра, например. используйте cv::GaussianBlur(image, result, cv::Size(1, 15), 0)
. Здесь размытие в направлении x
опущено, а размытие в направлении y
увеличено. Я думаю, это то, что хотел предложить другой комментатор.
Используйте детектор горизонтальных краев и разделите изображение на изображение края. Это ослабит горизонтальные линии изображения. (Вы можете умножить постоянное значение на результирующее изображение, чтобы сделать его лучше).
Как предложил @gameon67, вы можете использовать размер ядра 1x15, чтобы увеличить размытие в направлении y и опустить в направлении x. Однако я считаю, что в этом случае усредненная фильтрация лучше подходит, чем фильтрация по Гауссу. Подробнее о них можно прочитать в официальном документация.
img = cv2.blur(img,(1, 15)) # average filtering
img = cv2.GaussianBlur(img, (1, 15), 0) # Gaussian filtering
Я пробовал, и среднее размытие лучше для этого случая. Спасибо!
Мы говорим о горизонтальных линиях или о диагональных? Если диагональные тонкие, они могут исчезнуть после медианного фильтра. Горизонтальные линии: вам придется размыть больше, возможно, только в вертикальном направлении.