如何使用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准确计算图像中的行数的主要内容,如果未能解决你的问题,请参考以下文章