我無法從Android中的OpenCV Mat獲取圓矢量值。我想使用此功能:在Android中從OpenCV Mat獲取圓形矢量?
HoughCircles(Mat image, Mat circles, int method, double dp, double minDist)
然後我想顯示找到的圓圈。我卡住的地方是如何在此函數中使用circles
參數。
所以,問題是:我怎樣才能獲得Android的OpenCV的Mat類型的向量中的每個元素的3元素向量和值的數量?
我無法從Android中的OpenCV Mat獲取圓矢量值。我想使用此功能:在Android中從OpenCV Mat獲取圓形矢量?
HoughCircles(Mat image, Mat circles, int method, double dp, double minDist)
然後我想顯示找到的圓圈。我卡住的地方是如何在此函數中使用circles
參數。
所以,問題是:我怎樣才能獲得Android的OpenCV的Mat類型的向量中的每個元素的3元素向量和值的數量?
理想情況下,你會想用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
的代碼,並且看起來圓的參數被存儲爲具有CV_32FC3
類型的元素的1xN
矩陣,並且其中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();
希望幫助!
但我需要它在Java中的Android。對C++有好處,但對Java不起作用。 – 2011-12-16 06:37:40
就投你墊上載體:
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);
注意
這僅適用於2.3.1 OpenCV的真實。
一旦你有了自己的圈子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];
}
喜沒有u得到了解決這一個? – 2014-06-28 11:02:46