如何在java中进行reinterpret_cast以获取像素数组[重复]

Posted

技术标签:

【中文标题】如何在java中进行reinterpret_cast以获取像素数组[重复]【英文标题】:How to do reinterpret_cast in java to get pixel array [duplicate] 【发布时间】:2016-03-24 08:19:29 【问题描述】:

我想将以下代码转换为 java 语言。但是我找不到在 java 中做 reinterpret_cast 的方法。请帮帮我。

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

程序可以如下所示。我想检测模糊图像。

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);

【问题讨论】:

据我所知,Java 中没有等价物。只允许在兼容类型之间进行强制转换。而不是提出 C++ 代码并要求直接翻译;请发布您目前拥有的 Java,并说明您遇到的问题 - 将任意、惯用的代码从一种语言翻译成另一种语言几乎是不可能的...... 如果我理解正确,您是在尝试将图像转换为字符数组吗?也许尝试这样的事情?字符串 imageDataString = Base64.encodeBase64URLSafeString(imageByteArray) 发布您的 java 代码并描述您正在尝试的内容。就像将 byte[] 转换为 Base64 编码的字符串? 您在这里使用的Mat 类是什么?会是org.opencv.core.Mat吗? 【参考方案1】:

我了解到您有一个对象 FinalImage.data,并且您想将该对象中存储的数据转换为字符串。

这正是the Serializable interface 所做的。因此,如果您的 FinalImage.data 对象继承了它,您可以使用如下代码:

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

【讨论】:

【参考方案2】:

Java 是比 C 或 C++ 更高级别的语言,并且没有直接的方法将 内存区域 处理为 char 数组。

但是在这里您使用的是 OpenCV 类,并且 Java OpenCV 库提供了一些工具,因为它知道内部字节数组中的字节矩阵。对于常见的元素大小也是如此。

不幸的是,我对opencv的使用不足以猜测FinalImage的内部类型是什么,但我认为它应该是一个MatOfByte,因为你使用CV_8U和CV_8UC1类型。如果是,你可以试试这个:

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

【讨论】:

以上是关于如何在java中进行reinterpret_cast以获取像素数组[重复]的主要内容,如果未能解决你的问题,请参考以下文章

C与C++不同

如何在java中进行反射? [复制]

在java中如何给数据进行大小排序

如何在 Java 中使用 Comparator 进行排序

如何在 Java 8 中动态进行过滤?

java - 如何在java中使用布尔值对ArrayLists进行排序?