我无法从Android中的OpenCV垫上获取圆向量值。我想使用这个函数:
HoughCircles(Mat image, Mat circles, int method, double dp, double minDist)然后我想展示找到的圆圈。我遇到的问题是如何在这个函数中使用circles参数。
那么,问题是:如何从Android中OpenCV的Mat类型获取3元素向量的数量和向量中每个元素的值?
发布于 2014-12-05 05:07:01
一旦你有了你的圈子Mat
for (int i = 0; i < circles.cols(); i++)
{
double vCircle[] = circles.get(0,i);
double x = vCircle[0];
double y = vCircle[1];
double radius = vCircle[2];
}发布于 2011-12-16 04:47:29
理想情况下,您可能希望使用vector<Vec3f>列表来处理圆,如下所示:
vector<Vec3f> circles;
// do HoughCircles...
for(size_t i = 0; i < circles.size(); i++)
{
Vec3f circle = circles[i];
Point2f center(circle[0] /* x */, circle[1] /* y */);
float radius = circle[2];
// use the circle...
}EDIT :我尝试使用Mat编写代码,发现圆参数似乎以1xN矩阵的形式存储,元素类型为CV_32FC3,其中N是检测到的圆的数量。因此,每一列都包含所需的(x, y, radius)向量。
下面是我用C++编写的一个示例,说明了这一点:
Mat circleImage = imread("circle.png", 0);
Mat circleDisp;
cvtColor(circleImage, circleDisp, CV_GRAY2RGB);
Mat circles;
HoughCircles(circleImage, circles, CV_HOUGH_GRADIENT, 2, circleImage.rows >> 2, 200, 100);
for( size_t i = 0; i < circles.cols; i++ )
{
Vec3f vCircle = circles.at<Vec3f>(i);
Point center(cvRound(vCircle[0]), cvRound(vCircle[1]));
int radius = cvRound(vCircle[2]);
// draw the circle center
circle( circleDisp, center, 3, Scalar(0,255,0), -1, 8, 0 );
// draw the circle outline
circle( circleDisp, center, radius, Scalar(0,0,255), 3, 8, 0 );
}
namedWindow( "circles", 1 );
imshow( "circles", circleDisp );
waitKey();希望这能有所帮助!
发布于 2011-12-16 05:21:13
只需将你的Mat转换为vector:
HoughCircles(Mat image, Mat circles, int method, double dp, double minDist);
vector<Vec3f> myCircles = (vector<Vec3f>)circles;或者,更简单
HoughCircles(Mat image, vector<Vec3f>& circles,
int method, double dp, double minDist);便笺
这只适用于OpenCV 2.3.1。
https://stackoverflow.com/questions/8526172
复制相似问题