Hola, estoy codificando un sistema de visión de robot de juego de ajedrez simple, estoy tratando de mejorar algunas investigaciones previas para permitir la cámara y se puede usar un juego de ajedrez estándar. para moverse durante el juego Hasta ahora puedo ubicar el tablero en una imagen adquirida mediante cámara web, y quiero detectar movimientos tomando la diferencia de imágenes sucesivas para determinar qué ha cambiado y luego uso la información previa sobre la ocupación del tablero para detectar movimientos.Detectando movimientos de ajedrez de diferencias de imagen sucesivas usando herramientas de OpenCV
Mi problema es que me parece que no puede detectar con fiabilidad los cambios en este momento, mi tubería actual es la siguiente: Restar dos imágenes -> Histograma igualar la imagen de diferencia -> erosionar y dilatan diferencia de imágenes para eliminar cambios menores -> hacer una copia binaria y no transformada de distancia -> Obtener la burbuja más grande (que corresponde al valor más alto después de DT y de relleno por inundación que blob) -> repetir otra vez hasta DT devuelve un valor suficientemente pequeño como para ignorar el cambio.
estoy cifrando todo esto en OpenCV y C++. pero mi inundación parece no llenar los blobs, por lo tanto, en la mayoría de los casos acabo de detectar un cambio. Lo intenté también usando cv::inpaint
pero eso tampoco ayudó. Entonces mi pregunta es; ¿Estoy utilizando el enfoque incorrecto o de alguna manera turing puede hacer que la detección de cambios sea más confiable? En el caso de los primeros, ¿podría la gente sugerir rutas alternativas, preferiblemente codificables en C++/Python y/o OpenCV en un tiempo razonable?
gracias
una última nota: aléjate de C++ para esto si pudiera. Probablemente lo haga mucho más rápido con Python.A menos, por supuesto, que encuentre una biblioteca realmente valiosa en C++ que solo tenga que usar. En ese caso, lo envolvería y lo usaría de python. –
gracias por las sugerencias, no tengo miedo de abandonar completamente C++, puedo hacerlo todo con Python, estaba más interesado en la idea primero. Una de las limitaciones que tengo para la primera etapa es que la placa no necesita modificarse de ninguna manera (por lo que no hay marcadores o algo así), por lo tanto, realmente agradecería cualquier comentario teniendo esto en cuenta – makokal
¿Puede confiar en los colores de ¿las piezas son negras/blancas? Si es así, puede hacer PCA en el tablero al principio e identificar los dos lados por su color. Pero a partir de ese momento tendrás que seguir el tablero para no perder la orientación. –