我目前收到此错误:
OpenCV Error: Assertion failed (0 <= i && i < (int)vv.size()) in getMat_, file
/tmp/binarydeb/ros-kinetic-opencv3-3.1.0/modules/core/src/matrix.cpp, line 1200
terminate called after throwing an instance of 'cv::Exception'
what(): /tmp/binarydeb/ros-kinetic-opencv3-3.1.0/modules/core/src/matrix.cpp:1200:
error: (-215) 0 <= i && i < (int)vv.size() in function getMat_
我目前正在处理此代码,试图在我从机器人中获取的视频Feed中找到圆圈。经过一些巧妙的评论,我发现只要 Hough Circles (cv::HoughCircles
)确实检测到一个圆圈,我就会得到如上所示的错误。
cv::Size strel_size;
strel_size.width = 3;
strel_size.height = 3;
cv::Mat strel = cv::getStructuringElement(cv::MORPH_ELLIPSE,
strel_size);
cv::morphologyEx(img_bin, intr_ptr, cv::MORPH_OPEN, strel,
cv::Point(-1,-1), 3);
//cv::medianBlur(intr_ptr, copy_ptr, 7);
cv::bitwise_not(intr_ptr,intr_ptr);
cv::GaussianBlur(intr_ptr, intr_ptr, cv::Size(7,7), 2, 2);
cv::vector< cv::vector<int> > circles;
cv::HoughCircles(intr_ptr, circles, CV_HOUGH_GRADIENT, 1, 70, 140, 15, 20,
400);
for(size_t i = 0; i < circles.size(); i++) {
cv::Point center(cvRound(circles[i][0]), cvRound(circles[i][1]));
int radius = cvRound(circles[i][2]);
cv::circle(cv_ptr->image, center, 3, cv::Scalar(0,255,0), -1, 8, 0);
cv::circle(cv_ptr->image, center, radius + 1, cv::Scalar(0,255,0),
2, 8, 0);
ROS_INFO("x: %d, y: %d, r: %d\n", center.x, center.y, radius);
}
//cv::imshow(OPENCV_WINDOW1, cv_ptr->image);
cv::imshow(OPENCV_WINDOW2, cv_ptr->image);
//cv::imshow(OPENCV_WINDOW3, copy_ptr->image);
cv::waitKey(3);
我目前正在尝试使用运行 Ubuntu MATE 16.04 LTS 的 Rapsberry Pi 上的 ROS 构建自主无人机。解决现在识别红圈的计算机视觉问题。
答案 0 :(得分:2)
发生错误是因为圆圈的输出数组没有正确的格式。 cv::HoughCircles函数采用cv :: vector,而不是矢量矢量作为圆数组的类型。值也是浮点数,而不是整数。
比较http://docs.opencv.org/3.1.0/d4/d70/tutorial_hough_circle.html
上的教程(当cv :: HoughCircles找到一个圆圈时,它会尝试访问vec3f矩阵 - 但是在你的情况下,这是一个(空)cv ::整数向量,因此size-assertion失败。)