相关疑难解决方法(0)

如何确定线条的宽度?

我需要检测这些线的宽度:

在此输入图像描述

这些线是平行的并且有一些噪音.

目前,我所做的是:

1.使用减薄找到中心(张颂)

ZhanSuenThinning(binImage, thin);
Run Code Online (Sandbox Code Playgroud)

2.计算距离变换

cv::distanceTransform(binImage, distImg, CV_DIST_L2, CV_DIST_MASK_5);
Run Code Online (Sandbox Code Playgroud)

3.累积中心周围的一半距离

double halfWidth = 0.0;
int count = 0;
for(int a = 0; a < thinImg.cols; a++)
    for(int b = 0; b < thinImg.rows; b++)
        if(thinImg.ptr<uchar>(b, a)[0] > 0)
        {
            halfWidth += distImg.ptr<float>(b, a)[0];
            count ++;
        }
Run Code Online (Sandbox Code Playgroud)

4.最后,获得实际宽度

width = halfWidth / count * 2;
Run Code Online (Sandbox Code Playgroud)

结果,不太好,在1-2像素左右是错误的.在更大的图像上,结果更糟,有什么建议吗?

opencv image-processing computer-vision

6
推荐指数
3
解决办法
5932
查看次数

标签 统计

computer-vision ×1

image-processing ×1

opencv ×1