gpt4 book ai didi

java - 关于JavaCV例子的问题

转载 作者:太空宇宙 更新时间:2023-11-03 21:52:52 27 4
gpt4 key购买 nike

大家好,我正在尝试使用 JavaCV,因为我想了解它是如何工作的,以便将它的功能包含在我想要的项目中。我已经按照说明下载并设置了 OpenCV,我还从 bytedeco 下载了我需要包含在我的项目中的 JavaCV 1.0 jar。

我从网上找到的一个示例程序开始,该程序基本上是从网络摄像头抓取和保存图像。我写的代码如下:

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();

canvas.showImage(img);

我面临的问题是类型不匹配“无法从 Frame 转换为 opencv_core.LplImage”。

我曾尝试在线搜索此内容,但找不到关于此内容的合适答案。我发现的只是同一个例子。有人对此有任何想法吗?

需要强调的是,这是我第一次在 Java 中使用 openCV。我过去曾用它来制作对象跟踪程序,但这是使用 native openCV 和 Python 完成的。

最佳答案

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

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();
}
}

关于java - 关于JavaCV例子的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33200926/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com