Как сегментировать белые клавиши пианино в openCV, используя перспективное преобразование - PullRequest
0 голосов
/ 09 апреля 2020

У меня есть перспективное изображение клавиатуры пианино с левой стороны, например:

piano perspective

Я вручную обрисовываю четыре угла клавиатуры и передал его в функцию openCV getPerspectiveTransform, чтобы получить представление клавиатуры над головой. В результате получается следующее:

вид сверху overhead view

Я обнаружил, что если я не обведу 4 угла клавиатуры точно, то края белые клавиши на выходе преобразования перспективы не будут точно вертикальными.

Тогда я хочу составить схему всех белых клавиш. Поскольку белые клавиши пианино расположены равномерно, я просто разделил изображение вида сверху на 33 части по горизонтали. Затем я масштабировал нижние края контура по отношению длины нижней стороны к верхней стороне клавиатуры в исходном изображении. Я получил этот вывод.

enter image description here

Однако контуры белых клавиш не совпадают с краями белых клавиш.

Как мне воспользоваться тем, что все белые клавиши равномерно распределены по сегментам белых клавиш пианино, даже если края белых клавиш не идеально вертикальны?

* I не нужно использовать алгоритм обнаружения краев для сегментирования белых клавиш, так как иногда в определенных условиях освещения края не видны.

1 Ответ

0 голосов
/ 09 апреля 2020

Похоже, что преобразование перспективы немного отклонено, используя только 4 точки. Попробуйте использовать еще несколько и используйте cv2.findHomography вместе с cv2.warpPerspective для выполнения этой работы. Как только у вас будет лучшее преобразование перспективы, вы можете продолжить делать все остальное.

Пример кода использования v2.findHomography вместе с cv2.warpPerspective можно найти:

https://www.learnopencv.com/homography-examples-using-opencv-python-c/

Удачи.

...