2

我在从矩阵获取数据的动态内存分配中遇到问题

Image image_gray = new Image("im1.jpg");
Matrix circles = new Matrix(100, 1, 3);

问题一:不知道圈数,如何定位动态内存?

Emgu.CV.CvInvoke.cvHoughCircles(image_gray, circles, HOUGH_TYPE.CV_HOUGH_GRADIENT,
    2, 100, 200, 100, 10, 500);

问题2:现在圆是[100 ,3]的矩阵,我怎样才能得到

point center= Round (circle[i][1], circle[i][1])

我怎样才能得到

int radius= circle[i][2]; 

我的 for 循环应该是什么样子才能从矩阵中获取数据,并且强制转换应该是点和整数。

我已经试过了(不工作/错误)

for (int i=0; i < circles.Rows; i++) 
{ Matrix entry = circles.GetRow(i);

 float x = entry[0]; 
 float y = entry[1]; 
float r = entry[2];} // NOT WORKING

因为不是仅复制(必需)(i)行,而是复制整个矩阵(圆圈)并且 float x=......给出错误

No overload for method 'this' takes '1' arguments

请在这方面帮助我

问候


很抱歉回答我的问题。请给动态内存分配和矩阵数据一些提示

4

1 回答 1

0

文档表明它会增长矩阵以适应,但它也与之相矛盾,所以老实说,我会在具有更多圆圈的图像上尝试 1 行 1 列矩阵,看看它给你什么。我看到您使用的是 Matrix 类型 - 我不知道您如何转换为 cvHoughCircles 所需的 IntPtr,但应该直接迭代每一行并提取结果,即 3 个浮点数:(x, y, r) -

for (int i=0; i < circles.Cols; i++) {
    Matrix<float> entry = circles.GetRow(i);
    float x = entry[0]; // guessing here - the doc'n is truly awful
    float y = entry[1];
    float r = entry[2];
}
于 2010-12-20T15:36:14.607 回答