我试图在已经预处理过的图像中实现用于行检测的霍夫变换。
所以我的输入图像是黑白边缘图像,0-背景,255-前景。我不希望使用OpenCV内置的HoughLines库。
我实际上一直坚持创建累加器并适当增加其值。我无法弄清楚哪里出了问题,所以这是我的代码块:

int diagonal = sqrt(height * height + width * width);

IplImage *acc = cvCreateImage (cvSize(180, 2 * diagonal),IPL_DEPTH_8U, 1);
unsigned char* accData = (unsigned char *)acc->imageData;

for (int i=0; i<height; i++)
{
    for (int j=0; j<step; j++)
    {
        if (data[i*step + j] > 200)
        {
            for (int theta=0; theta<180; theta++)
            {
                int p = j * cos(theta) + i * sin(theta);
                if (p > 0)
                    accData[theta*180 + p] += 1;
            }
        }
    }
}

我进入acc的输出图像不是它应该的样子。我没有得到任何正弦曲线,而是到处只有白色斑块。谁能提供有关我哪里出问题的反馈?

最佳答案

我看到的是,不要将弧度值与弧度值一起使用,而将度数值与正弦值一起使用时,可以按以下方式进行更改:

int p = j * cos((double)theta*PI/180) + i * sin((double)theta*PI/180);

关于opencv - 实现线的霍夫变换,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16209928/

10-13 08:51