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)
| 归档时间: |
|
| 查看次数: |
1563 次 |
| 最近记录: |