我正在将部分基于 C++ OpenCV 的代码移植到 Java OpenCV。我正在使用 Willow Garage 准备的 Java 包装器,即 c++ OpenCV 背后的团队。我没有使用 javacv(托管在 googlecode)。
此代码的一部分访问网络摄像头的视频流并对其进行处理。使用 C++,我能够“实时”显示网络摄像头视频:如果我挥手,屏幕上的视频就会显示我在挥手。使用 Java,如果我挥手,视频(从网络摄像头拍摄)就无法跟上我的节奏:帧速率非常慢。
我所做的是:
我使用 OpenCV 读取网络摄像头视频的帧,它是一个名为
frame
的 Mat 对象;我访问
frame
的字节数组并使用它构建BufferedImage
;图像显示在
JPanel
的paint
方法中。
我在 OS X 10.8.5 上使用 java 版本 1.7 和 OpenCV 2.4.8。
您对我如何加快整个过程有什么建议吗?
问候
最佳答案
试试这个,,,它会给你更好的结果
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.ByteArrayInputStream;
import java.io.InputStream;
import javax.imageio.ImageIO;
import javax.swing.JFrame;
import javax.swing.JPanel;
import org.opencv.core.Core;
import org.opencv.core.Mat;
import org.opencv.core.MatOfByte;
import org.opencv.highgui.Highgui;
import org.opencv.highgui.VideoCapture;
public class Robot extends JPanel implements Runnable {
static BufferedImage bufImagew = null;
public Robot() {
JFrame f=new JFrame();
f.setVisible(true);
f.add(this);
f.setSize(new Dimension(640,500));
}
@Override
public void run() {
System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
VideoCapture camera = new VideoCapture(0);
// 1 for next camera
int i = 0;
try {
Mat frame = new Mat();
while (true) {
camera.read(frame);
Mat image_tmp = frame;
MatOfByte matOfByte = new MatOfByte();
BufferedImage bufImage = null;
if(image_tmp!=null)
Highgui.imencode(".jpg", image_tmp, matOfByte);
byte[] byteArray = matOfByte.toArray();
try {
InputStream in = new ByteArrayInputStream(byteArray);
bufImage = ImageIO.read(in);
} catch (Exception e) {
e.printStackTrace();
}
bufImagew=bufImage;
this.repaint();
if(i==5)
i=0;
}
} catch (Exception e) {
e.printStackTrace();
}
}
public void paintComponent(Graphics g)
{
System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
DetectFaceDemo d=new DetectFaceDemo();
try {
super.paintComponent(g);
g.drawImage(bufImagew,0,0,null);
}
catch(Exception e){}
}
public static void main(String[] args) {
Robot gs = new Robot();
Thread th = new Thread(gs);
th.start();
}
}
关于java - 加快 Java OpenCV 中网络摄像头的访问速度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21181795/