2012-01-31 33 views
12

Estoy tratando de implementar un software de reconocimiento de matrículas usando las ideas del http://iamabhik.wordpress.com/category/opencv/.Cómo copiar una región de imagen usando opencv en python?

Implementé la ubicación de la placa usando opencv en python, usando "import cv2". Funciona bien y ahora tengo que copiar la región de la placa a otra imagen para hacer la segmentación de los caracteres y luego la parte de OCR (tal vez usando una red neuronal).

Encontré la función GetSubRect() para copiar o aislar parte de la imagen pero no parece estar disponible en python. ¿Hay una alternativa? Las funciones de ROI tampoco parecen implementarse.

¿Existe una documentación actualizada de la interfaz de python para opencv?

Compilé opencv desde el repositorio svn (revisión 7239) en un entorno Debian wheezy/sid.

Siendo libre de sugerir métodos e ideas alternativos para resolver este problema.

Gracias de antemano.

Respuesta

42

Ambas funciones cv.GetSubRect y ROI están disponibles en Python, pero en el antiguo modo import cv o import cv2.cv. es decir, use cv2.cv.GetSubRect() o cv2.cv.SetImageROI si está familiarizado con ellos.

Por otro lado, es simple establecer ROI sin estas funciones debido a la integración numpy en el nuevo cv2.

Si (x1, y1) y (x2, y2) son los dos vértices opuestos de la placa que obtuvo, a continuación, sólo tiene que utilizar la función:

roi = gray[y1:y2, x1:x2] 

que es su ROI imagen.

Así que elija el traje que usted.

+1

yo era tratar de utilizar SetImageROI, pero en mi versión OpenCV (2.4.1) no funciona - copia de (0,0) punto siempre. Slice ndarray es una solución muy clara y buena. Gracias. – Xeningem

+0

Tuve el mismo problema siempre copiando del punto (0,0), me volvía loco. El cv2 con numpy parece una solución mucho mejor. – casper

+2

curioso ¿por qué está en las coordenadas y, x y no x, y? cv2.rectangle toma x, y ... tomar intuitivamente un roi es como tomar un rectángulo – user391339

4

Ejemplo: Si usted tiene algunos puntos, y desea copiar región contiene su

r = cv2.boundingRect(pts) 
cv2.imwrite('roi.png', im[r[0]:r[0]+r[2], r[1]:r[1]+r[3]]) 
+8

Creo que en realidad es' r [1]: r [1] + r [3], r [0]: r [0] + r [2] '. porque boundingRect devuelve' r = [x, y, w, h] 'y la sintaxis numpy espera' [y: y + h, x: x + w] ' – TKrugg

Cuestiones relacionadas