Rotación de imagen con opencv en android corta los bordes de una imagen

Posible duplicado:
Rotar cv :: Mat con cv :: warpAffine desvía la imagen de destino

¡El código abajo puede girar una imagen con éxito pero corta las esquinas de la imagen y gira en dirección incorrecta !!

Mat cvImage = Highgui.imread("mnt/sdcard/canvasgrid.png"); int degrees = 20; Point center = new Point(cvImage.cols()/2, cvImage.rows()/2); Mat rotImage = Imgproc.getRotationMatrix2D(center, degrees, 1.0); Mat dummy = cvWaterImage; Imgproc.warpAffine(cvImage, dummy, rotImage, cvImage.size()); rotatedImage = dummy; Highgui.imwrite("mnt/sdcard/imageRotate.png",rotatedImage); 

imagen original

Imagen girada

El fondo de la imagen girada más es negro pero quiero que sea transparente.

¿¿Estoy haciendo algo mal?? Gracias

EDITAR SOLUCIONADO

En primer lugar obtener nueva anchura / altura de la imagen girada

 double radians = Math.toRadians(rotationAngle); double sin = Math.abs(Math.sin(radians)); double cos = Math.abs(Math.cos(radians)); int newWidth = (int) (scaledImage.width() * cos + scaledImage.height() * sin); int newHeight = (int) (scaledImage.width() * sin + scaledImage.height() * cos); int[] newWidthHeight = {newWidth, newHeight}; 

// crea un nuevo cuadro de tamaño (newWidth / newHeight)

 int pivotX = newWidthHeight[0]/2; int pivotY = newWidthHeight[1]/2; 

// imagen de agua en rotación

 org.opencv.core.Point center = new org.opencv.core.Point(pivotX, pivotY); Size targetSize = new Size(newWidthHeight[0], newWidthHeight[1]); 

// ahora creamos otro mat, para que podamos usarlo para mapear

 Mat targetMat = new Mat(targetSize, scaledImage.type()); int offsetX = (newWidthHeight[0] - scaledImage.width()) / 2; int offsetY = (newWidthHeight[1] - scaledImage.height()) / 2; 

// Centralización de filigrana

 Mat waterSubmat = targetMat.submat(offsetY, offsetY + scaledImage.height(), offsetX, offsetX + scaledImage.width()); scaledImage.copyTo(waterSubmat); Mat rotImage = Imgproc.getRotationMatrix2D(center, waterMarkAngle, 1.0); Mat resultMat = new Mat(); // CUBIC Imgproc.warpAffine(targetMat, resultMat, rotImage, targetSize, Imgproc.INTER_LINEAR, Imgproc.BORDER_CONSTANT, colorScalar); 

// tu resultadoMat con un aspecto como este NO CULTIVADO Imagen // BTW .. hay una diferencia enorme entre el enlace proporcionado y esta solución

One Solution collect form web for “Rotación de imagen con opencv en android corta los bordes de una imagen”

Acabo de leer la documentación: ImgProc.warpAffine

Sólo un extracto:

 void warpAffine(InputArray src, OutputArray dst, InputArray M, Size dsize, [...]); //Parameters: dsize – Size of the destination image. 

Por favor intenta lo siguiente:

 Imgproc.warpAffine(cvImage, dummy, rotImage, dummy.size()); 

Con el fin de jugar con la transparencia, fiddle con el parámetro al final:

 Imgproc.warpAffine(cvImage, dummy, rotImage, dummy.size(), INTER_LINEAR, BORDER_TRANSPARENT); 
  • Después de girar una línea lineal, los eventos onclick no cambian de posición después de la rotación
  • La música se detiene cuando la pantalla gira utilizando MediaPlayer en Android
  • LibGDX texturepacker rotación
  • Rotar un ImageView como una brújula (con el "polo norte" puesto en otro lugar)
  • Android: gira el lienzo alrededor del centro de la pantalla
  • Cómo rotar el mapa de bits correctamente?
  • Android Mejor forma de evitar Diálogos para descartar después de una rotación del dispositivo
  • Android girar imageview, no puedo establecer la posición final de imageview en onAnimationEnd ()
  • Después de la rotación de la pantalla, se cambiará el idioma de mi aplicación
  • Android gire TextView en nivel de API> = 8
  • Android lo que debe ser punto de pivote para girar la imagen alrededor de su centro de la base
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.