2016-03-24 2 views
0

Je veux convertir le code suivant en langage java. Cependant, je ne peux pas trouver le moyen de faire reinterpret_cast en java. Aidez-moi, s'il vous plaît. Le programme peut être montré comme suit. Je veux détecter l'image de flou.Comment faire reinterpret_cast en java pour obtenir le tableau de pixels

Mat newEx=new Mat(); 
      final int MEDIAN_BLUR_FILTER_SIZE=15; 
      Imgproc.medianBlur(mat1, newEx, MEDIAN_BLUR_FILTER_SIZE); 

      Mat LaplacianImage= new Mat(); 
      Imgproc.Laplacian(newEx, LaplacianImage,CvType.CV_8U); 

      Mat LaplacianImage8Bit=new Mat(); 
      LaplacianImage8Bit.convertTo(LaplacianImage8Bit,CvType.CV_8UC1); 
      Mat FinalImage=new Mat(); 
      Imgproc.cvtColor(LaplacianImage8Bit,FinalImage,Imgproc.COLOR_BGR2BGRA); 

      int rows= FinalImage.rows(); 
      int cols= FinalImage.cols(); 

      char *pixels= reinterpret_cast<char*>(FinalImage.data); 
+10

Il n'y a pas, à ma connaissance, d'équivalent en Java. La diffusion est uniquement autorisée entre les types compatibles. Au lieu de poser du code C++ et de demander une traduction directe; s'il vous plaît poster le Java que vous avez jusqu'ici et expliquer où vous êtes coincé - il est presque impossible de traduire le code arbitraire, idiomatique, d'une langue à l'autre ... –

+0

Si je comprends bien, vous essayez de transformer une image en tableau de chars? Peut-être essayer quelque chose comme ça? String imageDataString = Base64.encodeBase64URLSafeString (imageByteArray) –

+1

Publiez votre code Java et décrivez ce que vous essayez. Comme convertir octet [] en Base64 codé String? – tak3shi

Répondre

0

Je comprends que vous avez un objet, FinalImage.data, et que vous voulez jeter les données stockées dans cet objet à une chaîne. C'est exactement ce que fait the Serializable interface. Donc, si votre objet FinalImage.data hérite que vous pouvez utiliser le code comme ceci:

ByteArrayOutputStream baos = new ByteArrayOutputStream(); 
ObjectOutputStream oos = new ObjectOutputStream(baos); 
oos.writeObject(FinalImage.data); 
String pixels = baos.toString(); 
oos.close(); 
0

Java est un langage de niveau supérieur à C ou C++ et n'a aucun moyen direct pour traiter une zone de mémoire comme un tableau de caractères.

Mais ici vous utilisez des classes OpenCV, et la bibliothèque Java OpenCV offre quelques outils, car elle sait qu'une matrice d'octets dans un tableau d'octets interne. Et même pour les tailles d'éléments communes.

Malheureusement, je ne suis pas assez habitué à devencv pour deviner quel est le type interne de FinalImage, mais je pense que ce devrait être un MatOfByte comme vous utilisez les types CV_8U et CV_8UC1. Si c'est le cas, vous pouvez essayer ceci:

MatOfByte byteMat = (MatOfByte) FinalImage; 
byte[] internalBytes = byteMat.toArray();