2012-07-17 17 views
6

He estado tratando de encontrar la mejor manera de detectar los 4 cuadrados negros en el papel y usarlos para aislar el papel con su propia imagen.¿Cómo puedo detectar marcadores de registro en papel usando OpenCV?

enter image description here

+0

Bienvenido a StackOverflow. ¿Qué has intentado hasta ahora que no está funcionando para ti? ¿Has visto [esta pregunta] (http://stackoverflow.com/q/11424002/62576) para ver si ayuda? Por favor, muestre un poco de esfuerzo para resolverlo usted mismo (aparte de publicar una imagen), y alguien aquí probablemente pueda ayudar. –

Respuesta

6

Parece que en la imagen sólo hay 4 cuadros negros así que lo que tenemos que hacer es: Imagen

  1. Convertir a grises umbral
  2. Do
  3. Encuentra contornos negros (antes de hacer esto en OpenCV tiene que invertir su imagen, porque por defecto OpenCV encuentra contornos blancos)
  4. Pase por estos contornos y encuentre el límite g rectángulo.
  5. hacer el cheque:

    A) área del rectángulo es más grande que alguna constante (en mi solución fue)

    B) del rectángulo de anchura/altura es cerca de 1.0 (en mi soultion era gama [0,9, 1,1])

el código:

Mat img = imread("test.jpg"), gray; 
vector<Vec4i> hierarchy; 
vector<vector<Point2i> > contours; 
cvtColor(img, gray, CV_BGR2GRAY); 
threshold(gray, gray, 100, 255, THRESH_BINARY); 
bitwise_not(gray, gray); 

findContours(gray, contours, hierarchy, CV_RETR_EXTERNAL, CV_CHAIN_APPROX_SIMPLE); 

for(size_t i=0; i<contours.size(); i++) 
{ 
    Rect rect = boundingRect(contours[i]); 
    double k = (rect.height+0.0)/rect.width; 
    if (0.9<k && k<1.1 && rect.area()>100) 
    { 
     drawContours(img, contours, i, Scalar(0,0,255)); 
    } 
} 

imshow("result", img); 
waitKey(); 

Resultado: enter image description here

Lea también this SO discussion - que no es necesario que 4 plazas para detectar papel.

Cuestiones relacionadas