关于JavaCV示例的问题

时间:2015-10-18 17:23:32

标签: java opencv video webcam javacv

我们正在尝试使用JavaCV,因为我想知道它是如何工作的,以便在我想到的项目中包含它的功能。我已经下载并设置了OpenCV,就像说明书所说的那样,我也已经下载了我需要在项目中包含的JavaCV 1.0 jar文件。

我已经开始使用我在网上找到的示例程序,它基本上可以从网络摄像头中获取并保存图像。我写的代码如下:

library(stringi)
v <- "http://www.bbc.co.uk/food/ingredients/by/letter/a"
stri_replace_last(v, letters, regex = "[a-z]")

这是一个非常简单易行的例子。我遇到的问题可以在以下几行找到:

import org.bytedeco.javacpp.opencv_core.IplImage;
import org.bytedeco.javacv.CanvasFrame;
import org.bytedeco.javacv.Frame;
import org.bytedeco.javacv.FrameGrabber;
import org.bytedeco.javacv.VideoInputFrameGrabber;

import org.bytedeco.javacv.*;
import org.bytedeco.javacpp.*;
import static org.bytedeco.javacpp.opencv_core.*;
import static org.bytedeco.javacpp.opencv_imgproc.*;
import static org.bytedeco.javacpp.opencv_imgcodecs.*;

public class GrabberShow implements Runnable{

    IplImage image;
    CanvasFrame canvas = new CanvasFrame("Web Cam");

    public GrabberShow(){
        canvas.setDefaultCloseOperation(javax.swing.JFrame.EXIT_ON_CLOSE);
    }

    public void run(){
        FrameGrabber grabber = new VideoInputFrameGrabber(0);
        int i = 0;
        try{
            grabber.start();
            IplImage img;
            while(true){
                img = grabber.grab();
                if(img != null){
                    cvFlip(img, img, 1);
                    cvSaveImage((i++) + "-aa.img", img);
                    canvas.showImage(img);
                }
            }
        }catch(Exception e){
            e.printStackTrace();
        }

    }

    public static void main(String[] args){
        GrabberShow gs = new GrabberShow();
        Thread th = new Thread(gs);
        th.start();
    }
}

img = grabber.grab();

我遇到的问题是Type Mismatch&#34;无法从Frame转换为opencv_core.LplImage&#34;。

我尝试在线搜索,但我无法找到一个好的答案。我所做的只是同样的例子。有没有人对此有任何想法?

第一次使用openCV和Java时需要强调这一点。我过去曾使用它制作和对象跟踪程序,但这是使用原生openCV并使用Python完成的。

1 个答案:

答案 0 :(得分:0)

您拥有的代码看起来可能适用于javacv版本0.10。对于1.0,FrameGrabber返回Frame个对象,然后需要使用IplImage转换为OpenCVFrameConverter.ToIplImage个对象。

import org.bytedeco.javacpp.opencv_core.IplImage;
import static org.bytedeco.javacpp.opencv_core.cvFlip;
import static org.bytedeco.javacpp.opencv_imgcodecs.cvSaveImage;
import org.bytedeco.javacv.CanvasFrame;
import org.bytedeco.javacv.Frame;
import org.bytedeco.javacv.FrameGrabber;
import org.bytedeco.javacv.OpenCVFrameConverter;
import org.bytedeco.javacv.VideoInputFrameGrabber;

...

public class GrabberShow implements Runnable {

    CanvasFrame canvas = new CanvasFrame("Web Cam");

    public GrabberShow() {
        canvas.setDefaultCloseOperation(javax.swing.JFrame.EXIT_ON_CLOSE);
    }

    public void run() {
        FrameGrabber grabber = new VideoInputFrameGrabber(0);
        OpenCVFrameConverter.ToIplImage converter = new OpenCVFrameConverter.ToIplImage();

        int i = 0;
        try {
            grabber.start();
            IplImage img;
            while (true) {
                Frame frame = grabber.grab();
                img = converter.convert(frame);
                if (img != null) {
                    cvFlip(img, img, 1);
                    cvSaveImage((i++) + "-aa.img", img);
                    canvas.showImage(frame);
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public static void main(String[] args) {
        GrabberShow gs = new GrabberShow();
        Thread th = new Thread(gs);
        th.start();
    }
}