工具版本:Android Studio版本3.4.2,OpenCV版本4.1.1

效果图:

下载和配置opencv

下载:https://opencv.org/releases/

1.opencv-4.1.1-android-sdk.zip下载完成之后,解压。解压之后有文件夹simples,sdk等。可以直接用AS打开simples,在任一一个simple编写识别程序。也可以新建project,fiile-new-import module导入sdk。

2.添加依赖,打开project structure

3.minSdkVersion ,targetSdkVersion 不一致,修改即可。

接下来,opencv识别,识别过程网上有很多,都可用。可以参考:

https://blog.csdn.net/SherlockHolmess/article/details/89706000

查找一维码通过面积和宽高比来定位:

 //计算轮廓的面积,
        for (int i = 0; i < contours.size(); i++) {
            MatOfPoint jfjs = contours.get(i);
            Double area = Imgproc.contourArea(contours.get(i));
            if (area > 5000) {
                System.out.println(area);
                barContours.add(contours.get(i));
                Rect r = Imgproc.boundingRect(contours.get(i));
                float w = (float) r.width;
                float h = (float) r.height;
                float rate = h / w;
                if (rate > 0.12 && rate < 0.34) {
                    //指定图像格式大小
                    Mat dst = new Mat(mRgba, r);
//                  一维码识别
                    String barcode=parse(matToBitmap(dst));
                    if(!TextUtils.isEmpty(barcode)){
                        Imgproc.putText(mRgba,barcode,new Point(r.x - 10, r.y - 14),FONT_HERSHEY_SIMPLEX,1,new Scalar(0, 255, 0),6);
                    }
//                    Imgcodecs.imwrite("/sdcard/360/barcode/" + i + "-条形码.jpg", dst);
                    Imgproc.rectangle(mRgba, new Point(r.x - 10, r.y - 10), new Point(r.x + r.width + 10, r.y + r.height + 10), new Scalar(255, 0, 0), 4);
                }
            }
        }

一维码识别:
 

int width = bitmap.getWidth();
int height = bitmap.getHeight();
int[] pixels = new int[width * height];
bitmap.getPixels(pixels, 0, width, 0, 0, width, height);
RGBLuminanceSource source = new RGBLuminanceSource(width, height, pixels);
BinaryBitmap binaryBitmap = new BinaryBitmap(new HybridBinarizer(source));
Reader reader = new Code128Reader();
try {
    result = reader.decode(binaryBitmap);
    barcode=result.getText();
    Log.i(TAG,barcode);

} catch (NotFoundException | ChecksumException | FormatException e) {
    Log.i(TAG,e.toString());
    e.printStackTrace();
}  
implementation project(path: ':sdk')
compile 'com.google.zxing:core:3.3.0'
compile 'com.google.zxing:android-core:3.3.0'

 

 

 

 

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐