2011-12-15 48 views
1

我無法從Android中的OpenCV Mat獲取圓矢量值。我想使用此功能:在Android中從OpenCV Mat獲取圓形矢量?

HoughCircles(Mat image, Mat circles, int method, double dp, double minDist) 

然後我想顯示找到的圓圈。我卡住的地方是如何在此函數中使用circles參數。

所以,問題是:我怎樣才能獲得Android的OpenCV的Mat類型的向量中的每個元素的3元素向量和值的數量?

+0

喜沒有u得到了解決這一個? – 2014-06-28 11:02:46

回答

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的代碼,並且看起來圓的參數被存儲爲具有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(); 

希望幫助!

+2

但我需要它在Java中的Android。對C++有好處,但對Java不起作用。 – 2011-12-16 06:37:40

0

就投你墊上載體:

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的真實。

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]; 
}