4

我安装了 JavaCV/OpenCV 库,但基本示例代码有问题。

根据我看过的几个例子,这段代码应该加载一个图像:

IplImage image = cvLoadImage("C:\\img.jpg");

但是,当我运行它时,我得到一个“找不到符号”错误。

由于这是我第一次使用它,我不确定我是否搞砸了安装。

根据最新的 JavaCV 自述文件,我确实拥有正确版本的 OpenCV。我还导入了所有 JavaCV jar 文件。据我所知,我也正确设置了所有路径。

有谁知道问题是什么?

编辑:

完整代码:

import com.googlecode.javacv.CanvasFrame;
import com.googlecode.javacv.cpp.opencv_core.IplImage;
import java.io.File;


public class demo {

    public static void main(String[] args) 
    {
        IplImage image = cvLoadImage("C:\\img.jpg");

        final CanvasFrame canvas = new CanvasFrame("Demo");
        canvas.showImage(image);
        canvas.setDefaultCloseOperation(javax.swing.JFrame.EXIT_ON_CLOSE);
    }

}

当我尝试运行它时出错:

线程“主”java.lang.RuntimeException 中的异常:无法编译的源代码 - 错误的符号类型:javacv.demo.main(demo.java:17) 处的 cvLoadImage

Java 结果:1

似乎它声称 cvLoadImage 不将字符串作为参数。

4

9 回答 9

5

我为您找到的四处走走是通过 ImageIO 加载图像并稍后将其传递给IplImage

例如:

 BufferedImage img =  ImageIO.read(new File("C:\\img.jpg") );
 IplImage origImg = IplImage.createFrom(img);
于 2013-04-07T22:23:29.050 回答
4

这解决了我的问题:import static org.bytedeco.javacpp.opencv_imgcodecs.*;

于 2015-10-22T23:16:37.423 回答
3

您必须添加此导入语句:
import static org.bytedeco.javacpp.opencv_imgcodecs.cvLoadImage; 这是必需的,以便cvLoadImage可以在不使用类名的情况下使用静态方法。

于 2015-12-20T20:42:37.527 回答
2

你必须import com.googlecode.javacv.cpp.opencv_highgui.*;

于 2013-05-02T16:45:41.650 回答
2

使用 javacv 0,9 你必须import static org.bytedeco.javacpp.opencv_highgui.*;

于 2014-09-24T21:26:15.300 回答
1

然后我得到了同样的错误,我导入了以下包,问题解决了。

import static com.googlecode.javacv.cpp.opencv_highgui.*;

于 2014-10-18T12:34:34.687 回答
1

这可能已经过时了,但对于那些像我一样偶然发现这个问题的人来说,这是我解决它的方法以及原因:

第一个 OP 的错误:线程“main”中的异常 java.lang.RuntimeException:无法编译的源代码 - 错误的 sym 类型:javacv.demo.main(demo.java:17)处的 cvLoadImage

这表明编译器找不到您尝试调用的 cvLoadImage 方法。

cvLoadImage 是JavaCPP 下的静态方法。具体来说,它是 opencv_imgcodecs 类下的静态方法。

要解决这个问题,必须首先指定 opencv_imgcodecs 类的导入。

这可以通过添加导入来完成:
import static org.bytedeco.javacpp.opencv_imgcodecs.cvLoadImage;

这反过来会导致 opencv_imgcodecs 类连同它的静态方法和其他函数在您的类中可用。

我希望这有帮助。

于 2018-02-27T04:30:43.407 回答
0

最近遇到了同样的问题。如果您使用的是 javacv-0.10(目前更新),请手动导入这个:

import static org.bytedeco.javacpp.opencv_highgui.*;

但是项目的JRE源要高于1.5

于 2015-03-14T07:01:18.180 回答
0

就我而言,问题发生在刮刀处于调试模式时。尝试在正常模式下运行。

于 2019-08-18T15:38:42.663 回答