- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我在 MATLAB R2015a 中使用这段代码:
javaaddpath('javacv.jar');
import org.bytedeco.javacv.*;
grabber = FrameGrabber.createDefault(0);
grabber.start();
img = grabber.grab();
我得到了 img
变量,它是 org.bytedeco.javacv.Frame
类。
如何将此类转换为 matlab 图像?
我已经完成了一半:
我从 org.bytedeco.javacv.Frame
转换为 org.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 完成后不会复制输出。
阅读 Problem on defining Java int array in 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
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 完成后不会复制输出。
阅读 Problem on defining Java int array in 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
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 - 从 org.bytedeco.javacv.Frame 转换为 matlab 图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32271101/
我试着用几天来解决。但它没有用。 以下是完整的错误日志: 02-19 09:41:31.239 17753-17753/com.superdata.cxim E/art: dlopen("/syste
我在 MATLAB R2015a 中使用这段代码: javaaddpath('javacv.jar'); import org.bytedeco.javacv.*; grabber = FrameGr
我使用的是Windows10, eclipse-neon with JDK1.8 版本,我收到以下异常。 Exception in thread "main" java.lang.NoClassDef
我在 Android 中创建了慢动作视频应用程序,我可以尝试在总视频长度中的任何开始和结束位置设置视频运动速度。 但是启动FFmpegFrameGrabber时出现一些错误。 这是我的代码: priv
我想编写一个实用程序,将 org.bytedeco.javacpp.lept.PIX 转换为 byte[] 和 BufferedImage。我尝试过以下方法: 1) 使用 Java2DFrameUti
我正在使用JavaCV开发人脸识别系统。我同时使用OpenCV和JavaCV。我也在使用AndroidStudio。 但是,它向我显示此错误。 12-20 00:22:25.315 6018-6018
我的图像表示为 org.bytedeco.javacpp.Mat。我只是想将其转换为 float/int 的 Java 数组。转换背后的原因是我想使用其他库(Nd4j)中的Java数组来实现图像排列目
我有一个使用bytedeco/javacv库的java应用程序。 但是当我运行该应用程序时,出现以下异常。 Exception in thread "main" java.lang.NoClassDe
我想在我的 Android 应用程序中同时使用 javacv 和 gpuimage。如果我只在我的应用程序中包含 javacv ,一切都会正常工作。当我在我的应用程序中包含 gpuimage 时,它崩
我想在 Linux 计算机上运行简单的 .flv 到 .mp4 转换 到目前为止,我添加了以下依赖项,并且它在 Ubuntu 12.x 和 CentOS 上运行良好 org.bytedeco.
我已将以下依赖项添加到我的 maven 项目中。 org.bytedeco javacpp 0.10 org.by
我在 Java 中使用 OpenCV(实际上是在 Scala 中)。我正在使用 org.bytedeco 包装器(opencpp 和 javacv),但文档不是很好。 问题是,根据示例,使用了两种不同
在CentOS中,使用javacpp调用FFmpeg做视频裁剪一帧,在我自己的开发机上使用这段代码是没有问题的,但是在centos6中报NoClassDefFound: Could not initi
那里!我尝试显示来自服务器的视频流作为字节数组。该数组中的数据是 h264 编码图像,我使用 bytedeco javacpp-presets 对其进行解码。以这种方式库: public class
我是一名优秀的程序员,十分优秀!