В Java все находится в форме класса.
Если вы хотите использовать любой объект, тогда у вас есть две фазы:
Пример:
Object a;
a=new Object();
То же самое для концепции массива
Item i[]=new Item[5];
i[0]=new Item();
Если вы не дают секцию инициализации, тогда возникает NullpointerException
.
Эта реализация JavaCV работает отлично.
КОД:
import com.googlecode.javacv.OpenCVFrameGrabber;
import com.googlecode.javacv.cpp.opencv_core.IplImage;
import static com.googlecode.javacv.cpp.opencv_highgui.*;
public class CaptureImage {
private static void captureFrame() {
// 0-default camera, 1 - next...so on
final OpenCVFrameGrabber grabber = new OpenCVFrameGrabber(0);
try {
grabber.start();
IplImage img = grabber.grab();
if (img != null) {
cvSaveImage("capture.jpg", img);
}
} catch (Exception e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
captureFrame();
}
}
Существует также пост о просмотре живого видео с камеры. И конфигурация для JavaCV:
Я думаю, что это будет соответствовать вашим требованиям.
FMJ может определенно захватывать видео и превращать его в кадры MJPEG.
Что касается тупиковости JMF, знаете ли вы о реализации FMJ ? Я не знаю, считается ли это «лучшим» решением, но, вероятно, стоит добавить к обсуждению.
Это моя реализация JavaCV с видеовыходом высокого разрешения и без заметного падения частоты кадров по сравнению с другими решениями (только когда перефокусируется моя веб-камера, я замечаю небольшое падение, хотя и на мгновение).
import java.awt.image.BufferedImage;
import java.io.File;
import javax.swing.JFrame;
import com.googlecode.javacv.CanvasFrame;
import com.googlecode.javacv.OpenCVFrameGrabber;
import com.googlecode.javacv.OpenCVFrameRecorder;
import com.googlecode.javacv.cpp.opencv_core.IplImage;
public class Webcam implements Runnable {
IplImage image;
static CanvasFrame frame = new CanvasFrame("Web Cam");
public static boolean running = false;
public Webcam()
{
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
@Override
public void run()
{
try
{
grabber.setImageWidth(800);
grabber.setImageHeight(600);
grabber.start();
while (running)
{
IplImage cvimg = grabber.grab();
BufferedImage image;
if (cvimg != null)
{
// opencv_core.cvFlip(cvimg, cvimg, 1); // mirror
// show image on window
image = cvimg.getBufferedImage();
frame.showImage(image);
}
}
grabber.stop();
frame.dispose();
} catch (Exception e)
{
e.printStackTrace();
}
}
public static void main(String... args)
{
Webcam webcam = new Webcam();
webcam.start();
}
public void start()
{
new Thread(this).start();
running = true;
}
public void stop()
{
running = false;
}
}
Вы когда-либо смотрели Processing.org ? Это - в основном упрощенная среда разработки приложения для разработки "вычурных" приложений и физических вычислительных платформ, но это основано на Java, и можно копнуть к "реальному" Java внизу.
причина, это пришло на ум, состоит в том, что существует несколько видео библиотеки для Обработки, которые являются в основном компонентами Java (по крайней мере, я думаю, что они - сайт имеет всю техническую информацию, в которой Вы, возможно, нуждались бы). Существует учебное руководство при пользовании библиотеками Обработки и инструментами в Eclipse IDE. Существуют также многочисленный примеры на видеосъемке и обработке.
, Даже если Вы не можете пользоваться библиотеками непосредственно, Обработка является большим языком/средой для разработки алгоритмов. Существует несколько ярких примеров захвата изображения и видеосъемки и обработки в режиме реального времени там.