使用 Hough OpenCV 时出错
Error when using Hough OpenCV
如果我不执行任何操作(即不通过控件窗口更改颜色检测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++异常:cv::内存位置 0x000000A75E81EB70 处的异常。
应用程序错误(使用 CPU 代码时不会收到此错误)-
OpenCV 错误:断言失败 (d == 2 && (size[0] == 1 || size[1] == 1 || size[0]*size[1] == 0)) 在 cv::_OutputArray::create, 文件 OPENCV_DIR\opencv-sources\modules\core\src\matrix.cpp, 第 2363 行
谁能帮忙?如果 CPU 或 CUDA 代码是固定的,那很好,但我更希望修复 CUDA 错误(因为 CUDA 有额外的速度)。
经过大量的试验和错误,我终于找到了解决方案。实际上,检测中的输出应该是GpuMat
而不是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);
...
}
霍夫变换中的 OpenCV GPU 错误(未实现函数)
我也有类似的问题。我的代码是这样的:
cv::Mat src, src_gray, src_blured, detected_edges, hough_lines;
std::vector<cv::Vec4i> lines;
src = cv::cvarrToMat(img, false);
opencv_run_ = true;
while (opencv_run_) {
cv::cvtColor(src, src_gray, CV_BGR2GRAY);
cv::medianBlur(src_gray, src_blured, blur_size_);
cv::Canny(src_blured, detected_edges, canny_low_threshold_, canny_max_threshold_, canny_aperture_size_);
cv::HoughLinesP(detected_edges, lines, 2, CV_PI / 2, hough_votes_, hough_min_line_length_, hough_max_line_gap_);
hough_lines = cv::Mat::zeros(size_horizontal_, size_vertical_, CV_8UC4);
for (size_t i = 0; i < lines.size(); i++) {
cv::line(hough_lines, cv::Point(lines[i][0], lines[i][1]), cv::Point(lines[i][2], lines[i][3]), cv::Scalar(0, 0, 255), 3, 8);
}
if (lines.size() > 0) lines.clear();
cv::imshow("Gray scale", src_gray);
cv::imshow("Edges", detected_edges);
cv::imshow("Hough", hough_lines);
//Some logic in waitKey and sleeptime
cv::waitKey(sleep_time);
}
cvDestroyAllWindows();
cvReleaseImageHeader(&img);
其中img
是指向我手动配置值的IplImage
的指针。(我的图像数据来自一个相机,其API为我提供了void *
即.raw数据)
这段特定的代码在 boost::thread 中运行。虽然在循环内一切运行良好,但当我这样做时
opencv_run = false;
this_boost_thread.join();
为了停止线程,我得到了无效参数异常。让我感到困惑的是,在线程返回后抛出了异常,这警告说这是堆栈损坏的经典案例。
经过几个小时的搜索,我在某个论坛上看到了一些帖子,说这可能是链接库的问题。所以我检查了我的opencv安装,发现我的库在vc12文件夹中,这意味着Visual Studio 2014(我喜欢安装预构建,因为我是个白痴),与我使用的VS 2015不同。
所以我搜索了Visual Studio 2015 opencv libs,在opencv 3.1版本中找到了一些 https://sourceforge.net/projects/opencvlibrary/files/opencv-win/,而我使用的是opencv 2.4.13。我决定不使用它们并从头开始构建opencv。所以我 https://github.com/opencv/opencv 从这里克隆,按照这里给出的说明 http://docs.opencv.org/2.4/doc/tutorials/introduction/windows_install/windows_install.html 并构建了似乎有效的 vc14 x86 opencv3.1 库。
- 创建 OpenCV 非自由版本 v4.3 时出错,可折叠.cpp错误 C2039、2605
- 在opencv中创建4x4垫矩阵时出错
- Gtk+ 3 使用 OpenCV 编译时出错
- Caffe Net.Forward 尝试使用 OpenCV 进行人脸检测时出错
- 尝试从 Github 编译 OpenCV QT 代码时出错
- OpenCV 加载 yaml 文件时出错
- 使用OPENCV 3.4加载CNN TensorFlow模型时出错
- 构建 OpenCV 时出错:"recompile with -fPIC"
- 在Ubuntu中使用VideOwriter(OpenCV)保存视频作为MP4时出错
- 在Debian上编译OpenCV(C++)时出错
- 使用CUDA编译OpenCV示例程序时出错
- 使用Inrange后,从HSV转换为BGR或OPENCV中的HSV到JPEG时出错
- 使用 OpenCV 保存 .pgm 图像时出错
- 制作 OpenCV 时出错
- 将calcOpticalFlowPyrLK与OpenCV 2.3.1一起使用时出错
- 调用功能 / C 和OPENCV时会出错
- Glibcxx 编译 FREAK OpenCV 演示文件时出错
- OpenCV C++代码在终端中运行良好,但在从Ubuntu 12.04运行时出错
- 使用CMake编译OpenCV项目时出错
- 使用cv::Mat.submat opencv时出错