如何在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以获取像素数组[重复]的主要内容,如果未能解决你的问题,请参考以下文章