使用Hough OpenCV时出错

Fad*_*der 4 c++ opencv hough-transform

如果我不执行任何操作(即不通过控制窗口更改颜色检测 HSV),则应用程序运行正常。但是,如果我在应用程序运行时更改 HSV 值,则会收到以下错误。我已经在没有霍夫的情况下测试了代码,它运行良好。

CPU 错误 -

HoughFinder.exe 中 0x00007FF9ECA64388 (ucrtbase.dll) 处出现未处理的异常:将无效参数传递给认为无效参数致命的函数。

这是我的代码 -

VideoCapture capture(0); // 0 is my webcam

...

capture.read(displayOriginal))
...(Code to detect colors for extra accuracy)
cudaCanny->detect(imgThresholded, imgCanny);

vector<Vec2f> lines;
//Ptr<HoughLinesDetector> hough = createHoughLinesDetector(1, CV_PI / 180, 100); CUDA code...
//hough->detect(imgCanny, lines); CUDA code...
HoughLines(displayCanny, lines, 1, CV_PI / 180, 100, 0, 0); // CPU code...
    for (size_t i = 0; i < lines.size(); i++)
    {
        float rho = lines[i][0], theta = lines[i][1];
        Point pt1, pt2;
        double a = cos(theta), b = sin(theta);
        double x0 = a*rho, y0 = b*rho;
        pt1.x = cvRound(x0 + 1000 * (-b));
        pt1.y = cvRound(y0 + 1000 * (a));
        pt2.x = cvRound(x0 - 1000 * (-b));
        pt2.y = cvRound(y0 - 1000 * (a));
        line(displayHough, pt1, pt2, Scalar(0, 0, 255), 3, CV_AA);
    }

imshow("Hough", displayHough);
imshow("Live Video", displayOriginal);
Run Code Online (Sandbox Code Playgroud)

额外信息 -

如果我使用 CUDA 代码来使用 Hough,我会收到此错误 -

HoughFinder.exe 中 0x00007FF9F561A1C8 处出现未处理的异常:Microsoft C++ 异常:内存位置 0x000000A75E81EB70 处的 cv::Exception。

应用程序错误(使用 CPU 代码时不要出现此错误)-

OpenCV 错误:cv::_OutputArray 中的断言失败 (d == 2 && (sizes[0] == 1 ||sizes[1] == 1 ||sizes[0]*sizes[1]==0)): :创建,文件 OPENCV_DIR\opencv-sources\modules\core\src\matrix.cpp,第 2363 行

有人可以帮忙吗?如果 CPU 或 CUDA 代码被修复,那很好,但我更希望修复 CUDA 错误(因为 CUDA 具有额外的速度)。

小智 5

经过多次尝试和错误,我终于找到了解决方案。实际上,检测中的输出应该是 aGpuMat而不是 a vect2d。我早就想明白了这一点,但 OpenCV 的文档非常混乱。这是编辑后的代码 -

Ptr<HoughLinesDetector> houghLines = createHoughLinesDetector(1, CV_PI / 180, 120);
GpuMat tmpLines; // This should be GpuMat...
vector<Vec2d> lines;
GpuMat imgCanny;
... 
while(true) {
    ...
    houghLines->detect(imgCanny, tmpLines);
    houghLines->downloadResults(tmpLines, lines);
    ...
}
Run Code Online (Sandbox Code Playgroud)

霍夫变换中的 OpenCV GPU 错误(函数未实现)