首先得下载OpenCV,下载链接,时间有点久但还是老实下载吧,避免少了什么东西。

https://opencv/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);
    }

}

更多推荐

Opencv在Java中的使用,及一直报错no opencv_javaxxx in java.library.path问题解决