Опитвам се да открия линии с нисък контраст на снимки на екран или изображения с шум като цяло. Изглежда се натъквам на два проблема:
Не мога надеждно да открия линията с адаптивен праг или алгоритъм за откриване на ръбове поради шума/тъмната мрежа на екрана. Изглежда, че Blur помага малко, но не достатъчно, за да го накарам да работи.
Когато се виждат само няколко сегмента от една и съща линия (поради шум, светлинни условия или други), бих искал да свържа откритите сегменти от линия към една права линия.
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
може да помогне... филтриране на мрежата. и с висок контраст
Тъй като нямам репутацията да публикувам снимки, добавих връзките. Изображение с линия с нисък контраст:
Открита линия: