2013-04-07 222 views
4

我安裝了JavaCV/OpenCV庫,並且遇到基本示例代碼的問題。JavaCV/OpenCV:cvLoadImage不起作用

根據我已經看過了幾個例子,此代碼應加載圖像:

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:不可編譯的源代碼 - 錯誤的符號(demo.java:17)

Java結果:1

似乎它聲稱cvLoadImage不會將字符串作爲參數。

+0

請提交更多日誌文件,以便我們可以幫助您 – 2013-04-07 21:09:21

+0

編輯並添加完整程序以及錯誤消息。這是它拋出的唯一錯誤。 – Lucas 2013-04-07 21:19:19

+0

你試過這個:http://stackoverflow.com/questions/2333285/java-lang-runtimeexception-uncompilable-source-code-what-c​​an-cause-這和這個:http://stackoverflow.com/questions/ 4386076/uncompilable-source-code-runtimeexception-in-netbeans? – cyriel 2013-04-07 21:33:47

回答

5

一走動,我覺得你是ImageIO的加載圖像,後來過時它IplImage

如:

BufferedImage img = ImageIO.read(new File("C:\\img.jpg")); 
IplImage origImg = IplImage.createFrom(img); 
+0

ImageIO.read(「C:\\ img.jpg」)說:找不到合適的方法讀取(字符串)我想也許我搞砸了安裝的地方。 – Lucas 2013-04-07 22:29:59

+0

對不起做這個新的文件(「C:\\ img.jpg」)@Redacted – 2013-04-07 22:31:24

+0

是的,這是有效的。謝謝您的幫助。任何想法爲什麼對方不會工作? CanvasFrame正在從cv庫加載,所以它必須工作。 – Lucas 2013-04-07 22:35:06

2

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

2

隨着javacv 0, 9你必須import static org.bytedeco.javacpp.opencv_highgui.*;

1

我得到了同樣的錯誤然後,我導入下面的軟件包,問題溶膠VED。

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

0

最近有同樣的問題。 如果您正在使用javacv-0.10(目前更近),進口手動這一個:

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

但JRE的項目應高於1.5

4

這解決了我的問題的根源: import static org.bytedeco.javacpp.opencv_imgcodecs.*;

+0

這不提供問題的答案。要批評或要求作者澄清,在他們的帖子下留下評論 - 你總是可以評論你自己的帖子,一旦你有足夠的[聲譽](http://stackoverflow.com/help/whats-reputation),你會能夠[評論任何帖子](http://stackoverflow.com/help/privileges/comment)。 – Chris 2015-10-23 07:38:52

+0

如果您有新問題,請點擊[問問題](http://stackoverflow.com/questions/ask)按鈕。如果有助於提供上下文,請包含此問題的鏈接。 – 2015-10-23 08:11:59

+0

@JoeTaras這不是問題。我想知道你是怎麼想的。也許你錯了。 – 2015-10-23 13:04:05

3

你必須添加此import語句:
import static org.bytedeco.javacpp.opencv_imgcodecs.cvLoadImage; 這是必需的,這樣的靜態方法cvLoadImage可以不使用類名稱中使用。

1

這可能是舊的,但對於那些在這個問題就像我剛纔誰絆倒, 這裏是我如何解決它,爲什麼:

首先OP的錯誤:異常在線程「主」了java.lang.RuntimeException :不可編譯的源代碼 - 錯誤的sym類型:javacv.demo.main上的cvLoadImage(demo.java:17)

這表示編譯器無法找到您嘗試調用的cvLoadImage方法。

cvLoadImage是JavaCPP下的靜態方法。 具體來說,它是opencv_imgcodecs類下的靜態方法。

要解決此問題,必須首先指定導入opencv_imgcodecs類。

這可以通過增加進口來完成:
進口靜態org.bytedeco.javacpp.opencv_imgcodecs.cvLoadImage;

這反過來會導致opencv_imgcodecs類在您的類中隨其靜態方法和其他函數一起使用。

我希望這會有所幫助。