2012-05-07 19 views
12

Estoy atrapado en la función de mi aplicación. Quiero una función de recorte similar a Cam Scanner Cropping. Las pantallas de CAM-SCANNER son: He creado una vista de recorte similar.Recortar UIImage como un camscanner

enter image description here

enter image description here

he obtenido CGPoint de cuatro esquinas. Pero, ¿cómo puedo obtener imágenes recortadas en inclinación?

Por favor, dame algunas sugerencias si es posible.

+0

Hola, ¿Puede usted por favor dígame cómo se ha implantado la cosa por encima o si es posible ¿puedes compartir cualquier tutorial o enlace útil? –

+0

Hola Dev, ¿Tienes la solución para este problema? Por favor, puede agregar el código para esta característica. Necesito exactamente así. – Mani

Respuesta

3

Veo 2 posibilidades. El primero es calcular una matriz de transformación que incline la imagen e instalarla en la propiedad CATransform3D de la capa de su vista.

Eso sería simple, suponiendo que supiera cómo formar la matriz de transformación que hizo el estiramiento. Nunca aprendí a construir matrices de transformación que estiren o sesguen las imágenes, así que no puedo ayudar. Sugeriría las matrices de transformación de Google y estiramiento/sesgo.

La otra manera sería convertir la parte de la imagen que está recortando en una textura OpenGL y mapear la textura en su salida. La parte del dibujo de textura real sería fácil, pero hay cerca de 1000 kilos de configuración de OpenGL por hacer, y mucho para aprender a fin de hacer cualquier cosa. Si quieres seguir esa ruta, te sugiero buscar ejemplos simples de texturas en 2D con el nuevo iOS 5 GLKit.

4

Este es un problema de transformación de perspectiva. En este caso, están trazando una proyección 3D en un plano 2D.

Como, la primera imagen tiene esquinas de selección en forma de cuadrilátero y cuando la transforma en forma rectangular, deberá agregar más información de píxeles (interpolation) o eliminar algunos píxeles.

Así que ahora el problema real es agregar información adicional de píxeles a la imagen recortada y proyectarla para generar una segunda imagen. Se puede implementar de varias maneras:

<> puede implementarlo usted mismo aplicando una matriz de transformación de perspectiva con interpolación.

<> puedes usar OpenGL.

<> puedes usar OpenCV. .. y hay muchas más formas de implementarlo.

He resuelto este problema usando OpenCV. Las siguientes funciones en OpenCV lo ayudarán a lograr esto.

  1. cvPerspectiveTransform

  2. cvWarpPerspective

Primera función calculará matriz de transformación utilizando las coordenadas origen y el destino de proyección. En su caso, la matriz src tendrá valores de CGPoint para todas las esquinas.Y dest tendrá puntos de proyección rectangulares, por ejemplo, {(0,0) (200,0) (200,150) (0,150)}.

Una vez que obtenga la matriz de transformación, tendrá que pasarla a la segunda función. usted puede visitar este thread.

Puede haber algunas otras alternativas a la biblioteca OpenCV, pero tiene una buena colección de algoritmos de procesamiento de imágenes.

aplicación iOS con biblioteca opencv está disponible en eosgarden.

+0

hey, ¿cómo puedes obtener CGPoint de estos cuadrados, para que podamos dibujar el punto de vista para el cultivo – Mukesh

0

Usando el código dado en Enlace: http://www.hive05.com/2008/11/crop-an-image-using-the-iphone-sdk/

En lugar de utilizar CGRect y CGContextClipToRect Trate de usar CGContextEOClip O CGContextClosePath

Aunque i havnt probamos este ... Pero he tratado dibujo trazado con CGContextClosePath cerrado los touchesBegan y eventos de TouchesMoved y TouchesEnd.

Hope esto puede dar una visión más clara a su problema ...