2016-03-24 16 views
0

Ich möchte den folgenden Code in Java-Sprache konvertieren. Ich finde jedoch nicht die Art und Weise, in Java neuinterpret_cast zu machen. Bitte hilf mir.Wie neuinterpret_cast in Java zu Pixel Array zu bekommen

Das Programm kann wie folgt angezeigt werden. Ich möchte Unschärfenbild erkennen.

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

Es gibt meines Wissens kein Äquivalent in Java. Casting ist nur zwischen kompatiblen Typen erlaubt. Anstatt C++ - Code zu setzen und um direkte Übersetzung zu bitten; bitte posten Sie das Java, das Sie bis jetzt haben und erklären Sie, wo Sie feststecken - es ist fast unmöglich, willkürlichen, idiomatischen Code von einer Sprache in eine andere zu übersetzen ... –

+0

Wenn ich richtig verstehe, versuchen Sie, ein Bild in ein Array zu verwandeln von Zeichen? Vielleicht versuchen Sie so etwas? String imageDataString = Base64.encodeBase64URLSafeString (imageByteArray) –

+1

Veröffentlichen Sie Ihren Java-Code und beschreiben Sie, was Sie versuchen. Wie konvertiert man Byte [] in Base64-codierte Zeichenfolge? – tak3shi

Antwort

0

Ich verstehe, dass Sie ein Objekt haben, FinalImage.data, und Sie möchten die Daten in diesem Objekt in eine Zeichenfolge gespeichert werfen.

Genau das tut the Serializable interface. Also, wenn Ihr FinalImage.data Objekt erbt, dass Sie Code so etwas wie diese verwenden:

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

Java ist eine höhere Sprache als C oder C++ und hat keinen direkten Weg, um eine Speicherzone als char-Array zu verarbeiten.

Aber hier verwenden Sie OpenCV-Klassen, und die Java OpenCV-Bibliothek bietet einige Werkzeuge, weil es weiß, dass eine Matrix von Bytes intern ein Byte-Array ist. Und das Gleiche für gängige Elementgrößen.

Leider bin ich nicht genug verwendet, um opencv zu raten, was ist der interne Typ von FinalImage, aber ich denke, dass es sollte ein MatOfByte sein, wie Sie CV_8U und CV_8UC1 Typen verwenden. Wenn es ist, könnten Sie das versuchen:

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