Opencv在Java中的使用,及一直报错no opencv_javaxxx in java.library.path问题解决
首先得下载OpenCV,下载链接,时间有点久但还是老实下载吧,避免少了什么东西。https://opencv.org/releases/版本要选对,下载后双击安装,记住安装路径要用到一个jar以及对应系统位数的.dll文件64为位就选x64里面的,32位就选x84里面的选错可能会报以下异常接下来打开IDea创建Java项目先导入jar包点击ok,apply即可如果这时候运行会报错这是缺少.dll文
·
首先得下载OpenCV,下载链接,时间有点久但还是老实下载吧,避免少了什么东西。
https://opencv.org/releases/
版本要选对,下载后双击安装,记住安装路径
要用到一个jar以及对应系统位数的.dll文件
64为位就选x64里面的,32位就选x84里面的
选错可能会报以下异常
接下来打开IDea创建Java项目
先导入jar包
点击ok,apply即可
如果这时候运行会报错
这是缺少.dll文件,只需要把.dll文件位置在vm一栏加上即可,必须是自己的安装位置
进来可能没有vm option这一栏,只需点击Modify options
选择添加即可
java代码示例
实现了找出照片中的圆功能
import java.util.ArrayList;
import java.util.List;
import org.opencv.core.Core;
import org.opencv.core.CvType;
import org.opencv.core.Mat;
import org.opencv.core.MatOfPoint;
import org.opencv.core.Point;
import org.opencv.core.Scalar;
import org.opencv.core.Size;
import org.opencv.highgui.HighGui;
import org.opencv.imgcodecs.Imgcodecs;
import org.opencv.imgproc.Imgproc;
import org.opencv.imgproc.Moments;
public class OpenCV {
static {
System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
}
public static void main(String[] args) {
imageMoments();
}
public static void imageMoments() {
Mat src=Imgcodecs.imread("D:\\图片.jpg");
// 1 图片灰度化
Mat gary=new Mat();
Imgproc.cvtColor(src,gary,Imgproc.COLOR_BGR2GRAY);
// 2 高斯降噪
Imgproc.GaussianBlur(gary,gary,new Size(3,3),0,0);
// 3 提取边缘
Mat edges=new Mat();
Imgproc.Canny(gary,edges,200,100,3,false);
// 4 发现轮廓
List<MatOfPoint> list = new ArrayList<MatOfPoint>();
Mat hierarchy = new Mat();
Imgproc.findContours(edges, list, hierarchy, Imgproc.RETR_TREE, Imgproc.CHAIN_APPROX_SIMPLE,new Point(0,0));
// 5 图像矩
List<Moments> moments=new ArrayList<Moments>();
List<Point> points=new ArrayList<Point>();
for (int i = 0,len=list.size();i < len;i++) {
moments.add(Imgproc.moments(list.get(i)));
points.add(new Point(moments.get(i).get_m10()/moments.get(i).get_m00(),moments.get(i).get_m01()/moments.get(i).get_m00()));
}
// 6 绘制轮廓
Mat drawimage = new Mat(src.size(),CvType.CV_8UC3);
src.copyTo(drawimage);
for (int i = 0, len = list.size(); i < len; i++) {
Imgproc.drawContours(drawimage,list,i,new Scalar(0,0,255),2,Imgproc.LINE_AA);//1 园
Imgproc.circle(drawimage,points.get(i),0,new Scalar(0,255,0),2,Imgproc.LINE_AA);// 圆心
}
Imgproc.resize(drawimage, drawimage, new Size(drawimage.cols()/2,drawimage.rows()/2));
// 7 显示结果
HighGui.imshow("图像矩(Image Moments)",drawimage);
HighGui.waitKey(0);
}
}
更多推荐
所有评论(0)
您需要登录才能发言
加载更多