数字图像处理之二维码图像提取算法(十一)

本文介绍了二维码图像处理中的精确定位算法,通过计算模块平均宽度并判断差值,确保定位点误差在0.5以内。在找到多个点后,进行均值化处理以提高精度。此外,文章还提到了在图像上标记定位点的方法,并简单介绍了OpenCV的相关函数如line(),以及需要注意的内存管理和窗口操作。下篇博客将深入探讨如何计算点的数量。
摘要由CSDN通过智能技术生成

// check ratio requirement b:w:b:w:b = 1:1:3:1:1
bool qr_checkRatio()
{
    totalFinderSize = 0;    
    for(int i =0;i<5; i++)
    {
        int count = stateCount[i];
        totalFinderSize += count;
        if(count == 0)
            return false;
    }
    if(totalFinderSize<7)
        return false;

    int moduleSize = ceil(totalFinderSize / 7.0); // scale factor of the finder
    
    // tolerate some "slop" of the ratio
    double maxVariance = moduleSize*tol_factor;
    bool retVal = ((abs(moduleSize - (stateCount[0]))< maxVariance) &&
    (abs(moduleSize - (stateCount[1]))< maxVariance) &&
    (abs(3*moduleSize - (stateCount[2]))< 3*maxVariance) &&
    (abs(moduleSize - (stateCount[3]))< maxVariance) &&
    (abs(moduleSize - (stateCount[4]))< maxVariance));

    return retVal;
}

以上代码就是判断是否为一个块。这个探测图像的比例为(1:1:3:1:1),计算出每个模块的平均宽度。差值不能超过0.5,这个tol_factor=0.5。如果满足这个条件那么就是我们所需找的一个定位点。


/* group possible finder locations, that is, each location vote in an array, so that 
we can find three largest votes, calculate the mean location of these three groups and
finally draw them on the image
*/
void group_points(vector<Point>& points)
{
    
   CvScalar red = CV_RGB(255,0,0);
    /* if the size of vector, number of possible finder locations is greater than 3,
    we need to group the
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值