【发布时间】:2015-02-10 08:15:20
【问题描述】:
我试图在 java 中将 Mat 转换为字节数组。在将 Mat 转换为 Byte[] 并将 Byte[] 转换为 Mat 时,我无法保留 Mat 的原始值。 Mat .get 接受 byte[] 作为无效的参数。任何人都可以帮助我吗?
用例:获取视频的每一帧并通过 kafka 将其发送给包含 byte[] 消息的消费者,然后消费者将接收字节数组并转换为 Mat 并将其保存为图像。
我在java中遇到过类似的帖子,但没有找到解决方案。 here
查看我的代码:
` System.loadLibrary("opencv_java249");
MatOfByte webcam_image = new MatOfByte();
VideoCapture capture = new VideoCapture(
"/home/jishnu/CodeT/TrainingDataSet/Video.mp4");
System.out.println("Frame Grabber started");
byte[] frameArray;
int i=0;
if (capture.isOpened()) {
while (true) {
capture.read(webcam_image);
frameArray = new byte[(int) (webcam_image.total() * webcam_image
.channels())];
if (!webcam_image.empty()) {
// System.out.print(".");
webcam_image.get(0,0,frameArray);
producer.send(new KeyedMessage<String, byte[]>("imageTopic",frameArray));
//Below statements are only for debugging
System.out.println(frameArray.length);
MatOfByte inputframe=new MatOfByte(frameArray);
boolean b= Highgui.imwrite("/home/jishnu/CodeT/Today7.jpeg", inputframe);
if(b){System.out.println("save image success");}
else System.out.println("save image failed");
inputframe.fromArray(frameArray);
b= Highgui.imwrite("/home/jishnu/CodeT/Today6.bmp",inputframe);
if(b){System.out.println("save image success");System.exit(0);}
else System.out.println("save image failed");
} else {
System.out.println(" --(!) No captured frame -- Break!");
`
【问题讨论】: