【快搭】Java+OpenCV

声明(本文仅适合新手参考) :

1. 不能保证所有人照着我做都能成功,如果不成功可以另寻他主。

2. 途中要是出现问题了,可以将问题贴在下面。有没有人解决我也不知道。

3. 你不成功,反正我成功了,hhhhhh

环境参数 :

windows : Win10

JDK版本 : 1.8.0_191

OpenCV版本 : 4.1.1

java开发工具 : eclipse

快搭 :

1. 没啥好办法,总之得先把opencv下载下来  https://opencv.org/

2. 漫长的等待之后就是双击打开进入安装页面(除了修改一下安装目录也没啥注意的了)

3. 打开到安装好的目录 %opencv%/build/java,就能发现供java使用的jar包(%opencv%指的是你安装的目录)

4. 新建一个Java工程 (普通项目或者maven项目问题都不大)

5. 将jar包引入项目,右键项目->选择properties->Java Build Path->Libraries->Add External JARs...->选择第3点提到的jar包

6. 还没结束,其实这个jar包并不做什么重要的实现,功能实际都已经被打包成dll,dll在x64和x86,64位系统用x64,32位系统用x86。怎么用?看下图

7. 各种确定,OK 点下来之后,Java+OpenCV就搭建完成了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是使用JavaOpenCV实现数字识别的步骤: 1.准备数据集:首先需要准备一组手写数字的图像数据集,包括数字0-9。可以使用MNIST数据集或自己手写数字的图像数据集。 2.提取特征:使用OpenCV提取数字图像的特征,可以使用HOG特征或LBP特征。 3.训练模型:使用机器学习算法,如SVM或神经网络,对提取的特征进行训练,生成数字识别模型。 4.测试模型:使用测试集对训练好的模型进行测试,评估模型的准确率。 5.应用模型:将训练好的模型应用到实际场景中,对输入的手写数字图像进行识别。 以下是一个使用JavaOpenCV实现数字识别的示例代码: ```java import org.opencv.core.Core; import org.opencv.core.Mat; import org.opencv.core.MatOfFloat; import org.opencv.core.MatOfInt; import org.opencv.core.Rect; import org.opencv.core.Size; import org.opencv.imgcodecs.Imgcodecs; import org.opencv.imgproc.Imgproc; import org.opencv.ml.SVM; public class DigitRecognizer { private SVM svm; public DigitRecognizer() { svm = SVM.create(); svm.setType(SVM.C_SVC); svm.setKernel(SVM.RBF); svm.setGamma(0.5); svm.setC(1); } public void train(String trainDataPath, String labelsPath) { // 读取训练数据和标签 Mat trainData = Imgcodecs.imread(trainDataPath, Imgcodecs.IMREAD_GRAYSCALE); Mat labels = Imgcodecs.imread(labelsPath, Imgcodecs.IMREAD_GRAYSCALE); // 提取HOG特征 MatOfFloat descriptors = new MatOfFloat(); Size winSize = new Size(20, 20); Size blockSize = new Size(10, 10); Size blockStride = new Size(5, 5); Size cellSize = new Size(5, 5); int nbins = 9; MatOfInt histSize = new MatOfInt(nbins); MatOfInt fromTo = new MatOfInt(0, nbins); MatOfInt channels = new MatOfInt(0); Imgproc.HOGDescriptor hog = new Imgproc.HOGDescriptor(winSize, blockSize, blockStride, cellSize, nbins); Rect roi = new Rect(0, 0, 20, 20); for (int i = 0; i < trainData.rows(); i++) { Mat digit = trainData.row(i).reshape(1, 20); MatOfFloat descriptor = new MatOfFloat(); hog.compute(digit.submat(roi), descriptor, winSize, blockSize, blockStride); descriptors.push_back(descriptor); } // 训练模型 svm.train(descriptors, SVM.RAW_OUTPUT, labels); // 保存模型 svm.save("svm.xml"); } public int predict(String digitPath) { // 读取待识别的数字图像 Mat digit = Imgcodecs.imread(digitPath, Imgcodecs.IMREAD_GRAYSCALE); // 提取HOG特征 MatOfFloat descriptor = new MatOfFloat(); Size winSize = new Size(20, 20); Size blockSize = new Size(10, 10); Size blockStride = new Size(5, 5); Size cellSize = new Size(5, 5); int nbins = 9; MatOfInt histSize = new MatOfInt(nbins); MatOfInt fromTo = new MatOfInt(0, nbins); MatOfInt channels = new MatOfInt(0); Imgproc.HOGDescriptor hog = new Imgproc.HOGDescriptor(winSize, blockSize, blockStride, cellSize, nbins); Rect roi = new Rect(0, 0, 20, 20); hog.compute(digit.submat(roi), descriptor, winSize, blockSize, blockStride); // 使用模型进行预测 float[] result = new float[1]; svm.predict(descriptor, result, SVM.RAW_OUTPUT); return (int) result[0]; } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值