从android中的图像检测数字

时间:2014-09-05 10:13:49

标签: android opencv image-processing

我正在搜索如何从android中的图像中提取数字数字。我必须拍一张照,然后我需要从图像中获取数字。 OpenCV是一个选项。我们可以将opencv转换成android吗?请建议我任何正确的方法。我将感激你。

3 个答案:

答案 0 :(得分:1)

OpenCV支持Android平台。你必须在这里逐步设置OpenCV4Android。

http://docs.opencv.org/doc/tutorials/introduction/android_binary_package/O4A_SDK.html

然而,OpenCV不是一个选项,而只是一个步骤。然后你必须使用字符识别引擎。最受欢迎的是Tesseract-ocr。但这真的不是一件容易的事。

此外,他们经常识别所有角色。如果你能实现它,提取数字将是Java中最容易的部分。

答案 1 :(得分:1)

答案 2 :(得分:0)

这对我有用,您只需要指定数字大小即可。ArrayList output = new ArrayList <>();

    cvtColor(input,input,COLOR_BGRA2GRAY);


    Mat img_threshold = new Mat();
    threshold(input, img_threshold, 60, 255,THRESH_BINARY_INV);
    Mat img_contours =copy(img_threshold);
    //Find contours of possibles characters


    List<MatOfPoint> contours = new ArrayList<MatOfPoint>();
    findContours(img_contours, contours,new Mat(), Imgproc.RETR_EXTERNAL, Imgproc.CHAIN_APPROX_NONE); // all pixels of each contours
    contours=sort(contours);


    // Draw blue contours on a white image
    Mat result=copy(img_threshold);
    cvtColor(result, result, COLOR_GRAY2BGR);
    drawContours(result,contours,
            -1, // draw all contours
            new Scalar(0,0,255), // in blue
            1); // with a thickness of 1


    //Start to iterate to each contour founded
    ListIterator<MatOfPoint> itc = contours.listIterator();

    //Remove patch that are no inside limits of aspect ratio and area.
    while (itc.hasNext())
    {
        //Create bounding rect of object
        MatOfPoint mp = new MatOfPoint(itc.next().toArray());
        Rect mr = boundingRect(mp);
        rectangle(result,new Point(mr.x,mr.y),new Point(mr.x+mr.width,mr.y+mr.height),new Scalar(0,255,0));

        Mat auxRoi=new Mat(img_threshold,mr);


        if (OCR_verifySizes(auxRoi))
        {
            output.add(preprocessChar(auxRoi));
        }
    }

    return output;`