我无法从Android中的OpenCV Mat获取圆矢量值。我想使用这个功能:
HoughCircles(Mat image, Mat circles, int method, double dp, double minDist)
然后我想展示找到的圈子。我遇到的问题是如何在此函数中使用circles
参数。
所以,问题是:如何在Android中的Mat类型的OpenCV中获取向量中每个元素的3元素向量和值的数量?
答案 0 :(得分:2)
圈子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];
}
答案 1 :(得分:1)
理想情况下,您可能希望使用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...
}
编辑:我使用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();
希望有所帮助!
答案 2 :(得分:0)
将你的Mat转换为矢量:
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。