【问题标题】:How to exactly count the number of lines in a image using opencv如何使用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;
}

【问题讨论】:

    标签: android opencv


    【解决方案1】:

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

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

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

    【讨论】:

    • 我有较低版本的opencv sdk。我在第一行出现错误,你能给我提供下载新版本opencv sdk的链接
    • @San 你有什么 OpenCV 版本?我已经用第二种方法更新了我的帖子,你可以试试吗?
    • 我现在有 2.3 版,我正在下载 3.2。还有一件事我在 android..ur 代码中使用 opencv 看起来像 c++
    • 没有帮助
    • @San 你介意解释一下你的问题是什么吗?有什么错误吗?
    猜你喜欢
    • 2020-06-20
    • 1970-01-01
    • 2015-10-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-25
    • 1970-01-01
    • 2021-08-12
    相关资源
    最近更新 更多