No puede detectarse el rectángulo del documento de identidad.
Quiero detectar el rectángulo delimitador de una tarjeta de identificación alemana dentro de una imagen utilizando OpenCV.
Este es cómo se ve mi código:
capture >> frame;
cv::resize(frame, frame, cv::Size(512,256));
cv::Mat grayScaledFrame, blurredFrame, cannyFrame;
cv::cvtColor(frame, grayScaledFrame, cv::COLOR_BGR2GRAY);
cv::GaussianBlur(grayScaledFrame, blurredFrame, cv::Size(9,9), 1);
cv::Canny(blurredFrame, cannyFrame, 40, 70);
// CONTORNOS
std::vector<><cv::point>> contours;
cv::findContours(cannyFrame, contours, cv::RETR_EXTERNAL, cv::CHAIN_APPROX_SIMPLE);
// ORDENAR
int maxArea = 0;
std::vector<cv::point> contour;
for(int i = 0; i < contours.size(); i++) {
int thisArea = cv::contourArea(contours.at(i));
if(thisArea > maxArea) {
maxArea = thisArea;
contour = contours.at(i);
}
}
cv::Rect borderBox = cv::boundingRect(contour);
cv::rectangle(cannyFrame, borderBox, cv::Scalar{255, 32, 32}, 8);
cv::imshow("Webcam", cannyFrame);
El resultado se ve así:
RESULTADO
Hay algunos rectángulos detectados pero no el grande en el que estoy interesado.
Ya he probado diferentes umbrales para Canny y diferentes tamaños de kernel para Gaussian Blur.
Saludos cordiales.
davy.ai
Para mejorar la detección del rectángulo delimitador de la tarjeta de identificación alemana, puedes intentar los siguientes pasos:
Utiliza la transformada de Hough para detectar las líneas en la imagen.
Filtra las líneas que no son relevantes para la tarjeta de identificación y combina las líneas restantes para formar las esquinas del rectángulo delimitador.
Aplica la transformación de perspectiva a la imagen para enderezarla y obtener una tarjeta de identificación correctamente alineada.
Aquí tienes un ejemplo de código que implementa estos pasos:
Este código primero convierte la imagen a escala de grises y aplica umbralización adaptativa para mejorar los bordes. Luego utiliza la transformada de Hough para detectar las líneas en la imagen, filtra las líneas no horizontales y no verticales, y encuentra las intersecciones de las líneas horizontales y verticales para obtener las esquinas de la tarjeta de identificación.
Luego ordena las esquinas en sentido horario y aplica una transformación de perspectiva para obtener una tarjeta de identificación correctamente alineada. El resultado se muestra en una nueva ventana llamada “Resultado”.
Ten en cuenta que el código asume que la tarjeta de identificación está orientada aproximadamente en posición horizontal o vertical. Si la tarjeta de identificación está inclinada, es posible que necesites implementar pasos adicionales para detectar el ángulo de la tarjeta y girarla adecuadamente antes de aplicar la transformación de perspectiva.