Я пытаюсь обнаружить низкоконтрастные линии на фотографиях экрана или зашумленных изображений в целом. Кажется, я столкнулся с двумя проблемами:
Я не могу надежно обнаружить линию с помощью алгоритма адаптивного порога или обнаружения краев из-за шумовой/темной сетки экрана. Размытие, кажется, немного помогает, но мне этого недостаточно, чтобы заставить его работать.
Когда видны только несколько сегментов одной и той же линии (из-за шума, условий освещения или других причин), я хотел бы соединить обнаруженные сегменты линии с одной прямой линией.
img = cv2.imread("test.jpg") gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) gray=cv2.GaussianBlur(gray,(9,9),0) bin = cv2.adaptiveThreshold(gray2, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY_INV, 33, 3) cv2.namedWindow('Test') cv2.imshow("Test", bin)
Я также экспериментировал с cv2.Canny
и cv2.HoughLinesP
, но без хороших результатов, так как темная сетка портит оба. Заранее спасибо!
РЕДАКТИРОВАТЬ: я полагаю, что локальная версия пороговой функции с THRESH_TRUNCATED
или THRESH_TOZERO
может помочь... отфильтровать сетку. и высококонтрастный
Поскольку у меня нет репутации для размещения фотографий, я добавил ссылки. Изображение с малоконтрастной линией:
Обнаружена линия: