JavaCV:无论我通过什么,cvLoadImage 都会返回 null

Alt*_*ape 3 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);

  }
}
Run Code Online (Sandbox Code Playgroud)

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

Sam*_*det 5

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

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