我想在eclipse环境中用java中的opencv实现Gabor Filter:
public static void main( String[] args ) throws IOException
{
System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
Mat mat = Highgui.imread("./img/lena.jpg");
Mat dst =new Mat();
Imgproc.cvtColor(mat, dst, Imgproc.COLOR_RGB2GRAY);
dst.convertTo(source_f, CvType.CV_64F, (1.0/255) , 0.0);
.
.
.
}
但是当它使用convertTo函数时,它显示错误:
Exception in thread "main" java.lang.NullPointerException
at org.opencv.core.Mat.convertTo(Mat.java:959)
at testOpenCV.GaborFilter.main(GaborFilter.java:175)
我搜索了一下,并尝试显示Mat对象,以知道它在哪里是空的,但不能。
我怎么能修复它,请甚至知道null在哪里?
我在你发布的代码片段中没有看到source_f
的声明。您可能希望在使用convertTo
指向source_f之前初始化它,例如:
Mat dst = new Mat();
Mat source_f = new Mat();
Imgproc.cvtColor(mat, dst, Imgproc.COLOR_RGB2GRAY);
dst.convertTo(source_f, CvType.CV_64F, (1.0/255) , 0.0);
不幸的是,我没有使用java api太多,所以不能100%确定语法是正确的。
同样,一步一步地测试你的假设也是一个好主意:
- 图像是否正确加载(
imread
),如果是,显示在屏幕上? -
dst
显示灰度转换后的像素是否正确? - 最后,source_f是否显示转换后的预期输出?