JavaCV:无论我传递什么,cvLoadImage都返回null

时间:2011-09-28 22:59:07

标签: java opencv

我在OS X 10.7.1上。我已经下载了最新的JavaCV二进制文件,并从当前的subversion checkout构建了OpenCV。无论我传递什么,cvLoadImage()函数都返回null。我已经验证我将它传递给有效的jpg图像的有效路径。其他JavaCV函数似乎返回合理的值,但由于我无法加载图像,我无法真正检查。

我想我可能在某个地方出错,但我不熟悉JavaCV如何报告错误,所以我无法检查。

编辑:我可以验证整个JavaCV安装是否有效,因为如果我使用Java的ImageIO加载图像,它可以工作,我可以随后对加载的图像进行操作,并保存图像(同样,通过ImageIO)。 SSCE如下:

import static com.googlecode.javacv.cpp.opencv_core.*;
import static com.googlecode.javacv.cpp.opencv_imgproc.*;
import static com.googlecode.javacv.cpp.opencv_objdetect.*;
import static com.googlecode.javacv.cpp.opencv_highgui.*;

import java.io.IOException;
import javax.imageio.ImageIO;
import java.io.File;
import java.awt.image.BufferedImage;
import com.googlecode.javacv.cpp.*;
import com.googlecode.javacpp.Loader;

class ImgLoadTest {
  public static void main(String[] args) {
     //comment out EITHER the BufferedImage bit OR the cvLoadImage portion.

     //works
     BufferedImage img =  ImageIO.read(new File(args[0]));
     IplImage origImg = IplImage.createFrom(img); 

     //returns null
     //IplImage origImg = cvLoadImage(args[0]);

     System.out.println("origImg is" + origImg);

  }
}

由于我可以通过ImageIO使其工作,我不再过分担心这个错误,但解决它可能对使用JavaCV的其他人有用。

1 个答案:

答案 0 :(得分:4)

OpenCV仅适用于ASCII文件名。如果你在路径中有i18n字符,它可能会很好地阻塞。此外,目前,JavaCV将所有String对象映射到UTF-8,并且看起来Mac OS X默认情况下不使用UTF-8。

因此,如果i18n对您的应用程序很重要,请继续使用ImageIO ......