从org.bytedeco.javacv.Frame转换为Matlab图像

塔尔

我在MATLAB R2015a中使用以下代码:

javaaddpath('javacv.jar');
import org.bytedeco.javacv.*;
grabber = FrameGrabber.createDefault(0);
grabber.start();
img = grabber.grab();

我得到的imgorg.bytedeco.javacv.Frame类的变量
我如何将此类转换为Matlab图像?

编辑

我有中途:
我从转换org.bytedeco.javacv.Frameorg.bytedeco.javacpp.opencv_core$Mat在此代码:

javaaddpath('javacv.jar');
import org.bytedeco.javacv.*;
import org.bytedeco.javacpp.*;
import org.bytedeco.javacpp.opencv_highgui.*;
grabber = FrameGrabber.createDefault(0);
grabber.start();
img = grabber.grab();
buff = img.image(1);
bytePointer = BytePointer(buff);
cvImage = javaObject('org.bytedeco.javacpp.opencv_core$Mat',img.imageHeight,img.imageWidth,opencv_core.CV_8UC3);
cvImage  = cvImage.data(bytePointer);
imshow('tal',cvImage);

我可以从imshow功能正确看到图像。
仍然我想从转换org.bytedeco.javacpp.opencv_core$Ma为Matlab图像。
我该怎么办?


能够将其转换为低效的方式,
将代码放在此处,希望有人将其转换为高效的方式的代码,并在此处发布作为答案。

javaaddpath('javacv.jar');
import org.bytedeco.javacv.*;
import org.bytedeco.javacpp.*;
grabber = FrameGrabber.createDefault(0)
grabber.start();
img = grabber.grab();
buff = img.image(1);
w = img.imageWidth;
h = img.imageHeight;
%// from here is inefficient code
charBuff = buff.asCharBuffer;
n = charBuff.length;
data = repmat(uint16(0),n,1);
for i=0:n-1
    data(i+1) = charBuff.get(i);
end
I = typecast(data, 'uint8');
I = cat(3,                              ...
        reshape(I(3:3:end),[w h])', ...
        reshape(I(2:3:end),[w h])', ...
        reshape(I(1:3:end),[w h])'  ...
   );
imshow(I);

更快的方法,仍然效率低下。
我认为没有更有效的方法,除非您编写自己的Java代码以提供该字节数组,因为matlab在函数调用时仅给出原始数组的副本,而不是其自身的数组。该函数可以修改数组,但是matlab完成后不会复制输出。
阅读有关在Matlab中定义Java int数组的问题中的“ before last”注释。

javaaddpath('javacv.jar');
import org.bytedeco.javacv.*;
import org.bytedeco.javacpp.*;
grabber = FrameGrabber.createDefault(0)
grabber.start();
img = grabber.grab();
buff = img.image(1);
w = img.imageWidth;
h = img.imageHeight;
%// from here is inefficient code
doubleBuff = buff.asDoubleBuffer;
n = doubleBuff.remaining;
data = zeros(n,1);
for i=1:n
    data(i) = doubleBuff.get();
end
I = typecast(data, 'uint8');
I = cat(3,                          ...
        reshape(I(3:3:end),[w h])', ...
        reshape(I(2:3:end),[w h])', ...
        reshape(I(1:3:end),[w h])'  ...
   );
imshow(I);
塔尔

更快的方法,仍然效率低下。
我认为没有更有效的方法,除非您编写自己的Java代码以提供该字节数组,因为matlab在函数调用时仅给出原始数组的副本,而不是其自身的数组。该函数可以修改数组,但是matlab完成后不会复制输出。
阅读有关在Matlab中定义Java int数组的问题中的“ before last”注释。

javaaddpath('javacv.jar');
import org.bytedeco.javacv.*;
import org.bytedeco.javacpp.*;
grabber = FrameGrabber.createDefault(0)
grabber.start();
img = grabber.grab();
buff = img.image(1);
w = img.imageWidth;
h = img.imageHeight;
%// from here is inefficient code
doubleBuff = buff.asDoubleBuffer;
n = doubleBuff.remaining;
data = zeros(n,1);
for i=1:n
    data(i) = doubleBuff.get();
end
I = typecast(data, 'uint8');
I = cat(3,                          ...
        reshape(I(3:3:end),[w h])', ...
        reshape(I(2:3:end),[w h])', ...
        reshape(I(1:3:end),[w h])'  ...
   );
imshow(I);

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

JavaCV使用哪个Java API?org.bytedeco.opencv.opencv_core还是org.opencv.core?

JavaCV RedHat Linux 6.6 x64 NoClassDefFound:无法初始化类org.bytedeco.javacpp.avutil

从图像序列javacv创建视频

使用javacv创建白色图像

java.lang.NoClassDefFoundError:无法初始化类org.bytedeco.javacpp.avutil

从byte []而非文件加载图像OpenCV(JavaCV)

JavaCV 显示视频捕获的彩色图像

使用JavaCV拼接一些图像

线程“主”中的异常java.lang.NoClassDefFoundError无法初始化类org.bytedeco.javacpp.avutil

分水岭图像分割JavaCv,未进行分割

JavaCV检测二进制图像上的验证码字母

在javacv中重塑IplImage

在NetBeans上运行javaCV

javaCV Maven项目

PDFBox2.0转换为图像,但是找不到“ org.apache.pdfbox.tools.imageio”

用于将.org转换为.xml的脚本

Android JavaCV + Camera2

在纯Java中学习JavaCV

javacv中的LineSegmentDetector(openCV 3)

Hibernate和@JoinFormula:org.hibernate.mapping.Formula无法转换为org.hibernate.mapping.Column

类型不匹配:无法从org.codehaus.jettison.json.JSONObject转换为org.json.JSONObject

org.apache.catalina.connector.RequestFacade 不能转换为 org.springframework.web.multipart.MultipartHttpServletRequest

org.gradle.initialization.DefaultSettings_Decorated 不能转换为 org.gradle.api.internal.project.ProjectInternal

将 org.bson.Document 转换为 Java 中的 org.bson.BasicBSONObject?

将org.json.JSONArray转换为org.json.simple.JSONArray

将org.springframework.amqp.support.converter.MessageConverter转换为org.springframework.messaging.converter.MessageConverter

org.hibernate.mapping.UnionSubclass无法转换为org.hibernate.mapping.RootClass

org.dom4j.DocumentFactory无法转换为org.dom4j.DocumentFactory

“无法将org.json.simple.JSONArray强制转换为org.json.simple.JSONObject”