C++ 意外的哈里斯探测器结果

C++ 意外的哈里斯探测器结果,c++,opencv,C++,Opencv,我将垂直梯度和水平梯度加载到这里发布的函数中,它计算出构成转角响应的总和。为什么只找到边界像素,我的阈值是0,否则图像上有0个角。对于渐变,我使用了sobel操作符 请看下面的输出图像 for(int i=0;i

我将垂直梯度和水平梯度加载到这里发布的函数中,它计算出构成转角响应的总和。为什么只找到边界像素,我的阈值是0,否则图像上有0个角。对于渐变,我使用了sobel操作符

请看下面的输出图像

for(int i=0;iimage1.rows-1)|(j-search_size/2<0|j+search_size/2>image1.cols-1)){
继续;
}
双Ix2=0,Iy2=0,Ixy=0;
双detM=0;
双traceM=0;
双R=0;
对于(int m=i-search\u size/2;m//除非你能详细说明一下,否则你是在用浮点运算。浮点并不精确,这可能是图像中出现轻微错误的原因之一?我当然不会依靠浮点运算来生成完美的图像,除非有代码明确地进行错误更正(我不知道您的代码是否考虑到了这一点)。我尝试了其他类型,我尝试了R=det(M)-k*trace(M)还有,没有大的变化。我不确定我是否正确地计算了梯度的总和,以使其更精确,谢谢你的支持。如果你确实将计算更改为数学上等效的计算,并且图像中有轻微的变化,那么它确实看起来像一个浮点错误问题。如果是这样的话,你可能不得不想出一个方法来解决这个问题HAT考虑错误并改正它(或者以某种方式使用整数而不是浮点)。不知道它是多么容易或困难。谢谢,我开始在整个图像中寻找角落,当我把它放在uChar上时,我没有考虑。谢谢朋友。
for (int i = 0; i < width; i++)
{
    for (int j = 0; j < height; j++)
    {
        if ((i - search_size / 2 < 0 || i + search_size / 2 > image1.rows - 1) || (j - search_size / 2 < 0 || j + search_size / 2 > image1.cols - 1)) {
            continue;
        }

        double Ix2 = 0, Iy2 = 0, Ixy = 0;

        double detM=0;
        double traceM=0;
        double R = 0;

        for (int m = i-search_size /2; m < i + search_size /2 ; m++){
            for (int n = j-search_size /2; n < j + search_size/2 ; n++){

                gauss = exp(-(((i - m) * (i - m)) + ((j - n) * (j - n))) / gaus_del);
                //Compute Ix^2 , Iy^2 and Ixy
                Ix2 += gauss*(image1.at<float>(m, n)*image1.at<float>(m, n));
                Iy2 += gauss*(image2.at<float>(m, n)*image2.at<float>(m, n));
                Ixy += gauss*(image1.at<float>(m, n)*image2.at<float>(m, n));
            }
        }



        detM = (Ix2*Iy2 - Ixy*Ixy);
        traceM = Ix2*Ix2 + Iy2*Iy2;

        R = detM / traceM;
        //cout <<i+j<< endl;
        //  std::cout << "R :" << Iy2 << endl;
        if (R > threshold)
        {
            circle(image, cv::Point2f(i, j), 3.5, cv::Scalar(255, 255, 0), 1, 5);
            cout << "corner found" << endl;
        }
    }
}