基于Java及Opencv3.4.1的图像线条识别

本文介绍了使用Java结合OpenCV3.4.1进行图像线条识别的方法,首先对图像进行模糊处理,然后通过Canny边缘检测和二值化减少干扰。接着,利用霍夫变换增强轮廓并定位线条,最后进行图像扫描识别。针对二维码边缘和反光影响,进行了特定的处理策略。
摘要由CSDN通过智能技术生成
  • 1.基于Java的图像识别,可以使用OpenCV函数包,本人用了OpenCV3.4.1,配置过程网上很齐全,也比较简单,在此不再赘述。我要识别的线条较粗,所识别的线条是图像中间二维码两侧的横线。因为白条很亮,最先开始我想先对图像制定区域进行二值化处理,再对指定区域进行像素点统计,但该方法准确度不高。最后采用canny+二值化+Hough transform+扫描识别的方案。

  • 2 .为了位二维码的一些边缘特性区分开,以及其他反光因素的影响尽可能降低。所以先采取opencv的blur函数进行图像模糊。然后用canny边缘识别函数提取图像的边缘特性,此刻的图像还是包涵了很多其他干扰,采取了二值化,以便识别过程进行特征区分。但是所提取的边缘信息还是很多,并且不好识别线条位置。       
  • 3.增强较大的轮廓边缘特征,可采用概率霍夫变换或者标准霍夫变换。两种霍夫变换在源代码中都有,我最后采用的是标准霍夫变换,这样识别的线条较为平整。之后就可以进行图像扫描识别。当然我所识别的图像需要对齐,不能有太大的左右角度位移。这也可以增加一个角度旋转的模块,先平齐,而后再识别。

源代码如下

import org.opencv.core.*;
import org.opencv.core.Point;
//import org.opencv.highgui.*;
import org.opencv.imgcodecs.Imgcodecs;
import org.opencv.imgproc.*;


public class Img_confirm {
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
        Mat image = Imgcodecs.imread("F:\\18\\eclipse-workspace\\img\\0038.jpg");
        int []y_location=new int[10];
         try
        {
        Imgproc.blur(image,image,new Size(4,4));//图像模糊
        Imgproc.cvtColor(image, image, Imgproc.COLOR_RGB2GRAY);//灰度处理
        
  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值