【发布时间】:2016-02-28 18:05:36
【问题描述】:
如果我什么都不做(也就是说,不要通过控制窗口更改颜色检测 HSV),应用程序运行正常。但是,如果我在应用程序运行时更改 HSV 值,则会出现以下错误。我已经在没有 Hough 的情况下测试了代码,它运行良好。
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);
额外信息 -
如果我使用 CUDA 代码来使用 Hough,我会收到此错误 -
HoughFinder.exe 中 0x00007FF9F561A1C8 处未处理的异常:Microsoft C++ 异常:内存位置 0x000000A75E81EB70 处的 cv::Exception。
应用程序错误(使用 CPU 代码时不会出现此错误)-
OpenCV 错误:CV 中的断言失败(d == 2 && (sizes[0] == 1 || sizes[1] == 1 || sizes[0]*sizes[1] == 0)): :_OutputArray::create,文件 OPENCV_DIR\opencv-sources\modules\core\src\matrix.cpp,第 2363 行
有人可以帮忙吗?如果 CPU 或 CUDA 代码是固定的,那很好,但我更希望修复 CUDA 错误(因为 CUDA 有额外的速度)。
【问题讨论】:
-
我也有同样的问题。我转换为灰度,应用中值滤波器,执行 Canny 边缘检测,然后执行霍夫线。如果我更改先前操作的参数,HoughLines 会抛出无效参数异常。我注意到有时 Canny 的输出有很多行。也许这就是问题所在?
-
从源代码重建 OpenCV 并且不要在 CMake 选项中使用
WITH_QT和 USEWITH_CUDA。
标签: c++ opencv hough-transform