Cómo utilizar OpenCV para implementar el posicionamiento basado en marcadores
Haga referencia a archivos de biblioteca y encabezado OpenCV e incluya vectores para su uso posterior.
#include
#include
#include #include #include #include #pragma comentario (lib , "opencv_ core244d.lib") #pragma comentario (lib, "opencv_highgui244d.lib") #pragma comentario (lib, "opencv_imgproc244d.lib") usando el espacio de nombres std; usando el espacio de nombres cv; Cargue la imagen a procesar para facilitar la visualización de la imagen a escalar. De hecho, el pequeño truco de escalar. También puede mejorar la eficiencia de la velocidad de procesamiento posterior. Luego, la imagen se escala de grises y luego se binariza para eliminar las partes con menor saturación y se usa la función HoughCircles para extraer el contorno del círculo. Tenga en cuenta que ajustar varios parámetros de la función HoughCirles producirá resultados diferentes. Tenga paciencia y realice ajustes según la situación real. altura; Gris mate; cvtColor(redimensionado,gris,CV_BGR2GRAY desenfoque(gris,gris,Tamaño(3,3)); /p> umbral( gris,gris,160,255,THRESH_BINARY_INV); desenfoque(gris,gris,Tamaño(3,3)); vector HoughCircles(gris, círculos,CV_HOUGH_GRADIENT,2,h/4,25,100,h/32,h/8); vector mientras(it!= círculos.end()) { círculo(redimensionado,Punto((*it)[0 ],(*it)[1]),2,Escalar(0,0,255),2); circle(resized,Point((*it)[0],(*it)[1 ]),(*it)[2],Scalar(0,0,255),2); ++it; } namedWindow(" src"); imshow("src",resized); namedWindow("resized"); imshow("resized",gray); waitKey(0); Explicación del código: Cuando utilice HoughCircles, debe tener en cuenta que el primer parámetro que pase debe ser una imagen en escala de grises. Configure los parámetros según sea necesario, parámetro 2: resolución del acumulador, parámetro 3: distancia mínima entre dos círculos, parámetro 4: umbral alto de Canny, parámetro 5: número mínimo de votos, parámetros 6 y 7: radio mínimo y máximo. El círculo capturado por la función se almacena en el círculo vectorial Vec3f es una estructura de tres variables Vec3f[0], Vec3f[1] corresponde a las coordenadas centrales del círculo y Vec3f[2]. corresponde al radio del círculo. Para mostrar los resultados, utiliza la función círculo para dibujar el centro y el círculo en rojo. Sin embargo, las imágenes tomadas por la cámara no son las mismas que los gráficos por computadora. Las imágenes reales se verán afectadas por las condiciones de luz y la intensidad, lo que resultará en grandes desviaciones en los resultados de la toma. Como se muestra en la imagen a continuación, la imagen capturada real puede tener sombras y el procesamiento en escala de grises también afectará el valor de la captura. Usando el código anterior, se capturaron 7 círculos, pero en realidad solo se necesitaron 2, el izquierdo y el derecho, por lo que los innecesarios se pueden filtrar según las coordenadas. El posicionamiento de coordenadas real basado en marcadores también se puede lograr utilizando la siguiente figura. La figura analizada no solo puede identificar las coordenadas, sino también determinar la dirección de desarrollo real. La siguiente figura se convertirá en código Hemming. para el análisis.