这几天在用java做一个图像处理的东西。自己是按着这个Guide来的(点我点我),上面后面的教程中用到了OpenCV,于是我就着手搭建这个环境了。
我找到了一个opencv的jar包,然后把jar包放到了我的项目里面。然后拷贝了一段demo代码。demo中一句这样的代码
System.loadLibrary( Core.NATIVE_LIBRARY_NAME );
这句的功能是加载一个native的库,其中NATIVE_LIBRARY_NMAE的值为opencv_java310。说白了对于Linux而言就是加载libopcv_java310.so。对于Windows就是opencv_java310.dll。单有jar文件是不行的。于是我又去官网下载了opencv-3.1.0,解压之后
cmake .
make
就可以得到库文件了。里面就有libopencv_java310。为了方便,你可以把lib目录里的所有的so文件复制到/usr/local/lib目录里。
然而到这里并没有结束,你还要告诉IDE到哪里去找这个library。对于Eclipse而言,你直接设置native library path就行了。对于IDEA,在Run->Edit Configurations里JVM options中添加
-Djava.library.path="/usr/local/lib"
重点issue
opencv-3.1.0去掉了highgui,把原来highgui分到了Imgcodecs(imread/imwrite and friends)和Videoio(VideoCapture, VideoWriter)
opencv-3.1.0去掉了highgui,把原来highgui分到了Imgcodecs(imread/imwrite and friends)和Videoio(VideoCapture, VideoWriter)
opencv-3.1.0去掉了highgui,把原来highgui分到了Imgcodecs(imread/imwrite and friends)和Videoio(VideoCapture, VideoWriter)
具体可以参考这里:传送门
我最初给的那个教程上是用2.4.*的版本做的示例。上面有这样一段代码:
import org.opencv.core.Core;
import org.opencv.core.Mat;
import org.opencv.highgui.Highgui;
import org.opencv.imgproc.Imgproc;
public class Main {
static int width;
static int height;
static double alpha = 2;
static double beta = 50;
public static void main( String[] args ) {
try {
System.loadLibrary( Core.NATIVE_LIBRARY_NAME );
Mat source = Highgui.imread("grayscale.jpg",
Highgui.CV_LOAD_IMAGE_GRAYSCALE);
Mat destination = new Mat(source.rows(),source.cols(),source.type());
Imgproc.equalizeHist(source, destination);
Highgui.imwrite("contrast.jpg", destination);
}catch (Exception e) {
System.out.println("error: " + e.getMessage());
}
}
}
这段代码在3.*下面根本编译不过。会死在和Highui有关的语句上。同样地,你如果下载2.4的版本,还是会编译失败。这次会死在下面这句上。
System.loadLibrary( Core.NATIVE_LIBRARY_NAME );
所以我们还是用3.x的版本吧。改动一下代码就行了。把highgui.imread改为Imgcodecs.imread。