如何使用opencv准确计算图像中的行数

Posted

技术标签:

【中文标题】如何使用opencv准确计算图像中的行数【英文标题】:How to exactly count the number of lines in a image using opencv 【发布时间】:2017-05-11 06:16:44 【问题描述】:

如何准确计算数字之间的行数,总计数必须是6

我用这个方法用openCV统计行数,得到了灰度图。

lines.cols() 是计算图像行数的正确方法吗?

public String Func() 

    Bitmap bitmap = BitmapFactory.decodeResource(getApplicationContext().getResources(), R.drawable.park);
    mat = new Mat();
    edges = new Mat();
    Mat mRgba = new Mat(612, 816, CvType.CV_8UC1);
    Mat lines = new Mat();


    Utils.bitmapToMat(bitmap, mat);
    Imgproc.Canny(mat, edges, 50, 90);

    int threshold = 50;
    int minLineSize = 20;
    int lineGap = 20;

    Imgproc.HoughLinesP(edges, lines, 1, Math.PI / 180, threshold, minLineSize, lineGap);


    int count = lines.cols();
    System.out.println("count = " + count);
    String cou = String.valueOf(count);

    for (int x = 0; x < lines.cols(); x++) 
        double[] vec = lines.get(0, x);
        double x1 = vec[0],
                y1 = vec[1],
                x2 = vec[2],
                y2 = vec[3];

        Point start = new Point(x1, y1);
        Point end = new Point(x2, y2);
        Core.line(mRgba, start, end, new Scalar(255, 0, 0), 3);

    

    Bitmap bmp = Bitmap.createBitmap(mRgba.cols(), mRgba.rows(), Bitmap.Config.ARGB_8888);
    Utils.matToBitmap(mRgba, bmp);
    bitmap = bmp;

    Drawable d = new BitmapDrawable(Resources.getSystem(), bitmap);
    img2.setImageDrawable(d);

    return cou;

【问题讨论】:

【参考方案1】:

根据这个SO's answer 和this 之一,您的代码示例似乎是正确的。

为了获得更好的效果,在应用 canny 滤镜之前,您应该对图像进行颜色阈值,以仅保留白色的条带。

除此之外,我认为您应该增加minLineSize 以丢弃太短的行。

【讨论】:

我有较低版本的opencv sdk。我在第一行出现错误,你能给我提供下载新版本opencv sdk的链接 @San 你有什么 OpenCV 版本?我已经用第二种方法更新了我的帖子,你可以试试吗? 我现在有 2.3 版,我正在下载 3.2。还有一件事我在 android..ur 代码中使用 opencv 看起来像 c++ 没有帮助 @San 你介意解释一下你的问题是什么吗?有什么错误吗?

以上是关于如何使用opencv准确计算图像中的行数的主要内容,如果未能解决你的问题,请参考以下文章

如何精确计算文本所占的行数

使用group by时如何计算列中的行数

如何计算 MySqlDataReader 中的行数?

PowerShell:如何计算 csv 文件中的行数?

Qt - 如何计算 .txt 文件中的行数

如何使用 ucanaccess 获取查询中的行数