varias trabajar segmentacion rectangle recortar mostrar imagenes imagen from con como python image

trabajar - roi opencv python



Cómo encontrar una imagen dentro de otra imagen usando python (4)

EDIT: Ok, aquí está la forma ingenua de hacer esto:

import Image, numpy def subimg(img1,img2): img1=numpy.asarray(img1) img2=numpy.asarray(img2) #img1=numpy.array([[1,2,3],[4,5,6],[7,8,9]]) #img2=numpy.array([[0,0,0,0,0],[0,1,2,3,0],[0,4,5,6,0],[0,7,8,9,0],[0,0,0,0,0]]) img1y=img1.shape[0] img1x=img1.shape[1] img2y=img2.shape[0] img2x=img2.shape[1] stopy=img2y-img1y+1 stopx=img2x-img1x+1 for x1 in range(0,stopx): for y1 in range(0,stopy): x2=x1+img1x y2=y1+img1y pic=img2[y1:y2,x1:x2] test=pic==img1 if test.all(): return x1, y1 return False small=Image.open(''small.tif'') big=Image.open(''big.tif'') print subimg(small, big)

Funciona bien, pero quiero VELOCIDAD. Creo que la clave está en la matriz ''prueba'' que podríamos usar para omitir algunas posiciones en la imagen.

Edición 2: asegúrese de utilizar imágenes en un formato sin pérdidas para probar esto.

En Mac , instale Pillow y from PIL import Image

Estoy tratando de usar python para determinar si una imagen (pequeña) está dentro de otra imagen (grande).

¿Alguna sugerencia antes de que me tome por el camino equivocado?

/ edit: Ok, algunas ideas: estoy usando PIL y estoy convirtiendo cada imagen al modo ''P'' para poder comparar cada píxel como un entero. Estoy tratando de implementar algo como una búsqueda de cuerdas Boyer-Moore o el algoritmo Knuth-Morris-Pratt, pero en 2 dimensiones.

Quizás esto ayude: en lugar de buscar ABC in XXXABCXXX (respuesta = 4) estamos buscando

ABC DEF GHI

en

XXXXX XABCX XDEFX XGHIX XXXXX

(respuesta = (2,2))


Eche un vistazo a mi respuesta a una pregunta similar para un ejemplo de código usando OpenCV . La conversión de PIL a numpy es sencilla, por ejemplo, simplemente use np.array(pilimage) .


Sé que es un poco tarde, pero puede usar Boyer-Moore para buscar la primera línea de la imagen pequeña en cada una de las líneas de la imagen grande. En el momento en que encuentra una coincidencia, tiene la posición X e Y y solo tiene que verificar si el resto de las líneas de la imagen más pequeña coincide con el resto de las líneas de la imagen más grande que comienzan en la posición X e Y + 1,2. 3, ... En el primer desajuste continuar con la búsqueda de la primera línea. No creo que puedas llegar más rápido que esto.


Sikuli lo hace usando OpenCV, vea here cómo funciona match_by_template y luego use los enlaces de Python OpenCV para hacer lo mismo. Hacerlo sin OpenCV debería ser difícil, eche un vistazo a la documentación de OpenCV, busque la coincidencia de plantillas, etc.