OpenCv& EmguCv等效方法?

时间:2014-08-31 22:49:41

标签: opencv emgucv

正如berak在评论中所说,这段代码似乎已被弃用

在Opencv中有一个方法" cvmget",样本用法是:

bool niceHomography(const CvMat * H)
{
  const double det = cvmGet(H, 0, 0) * cvmGet(H, 1, 1) - cvmGet(H, 1, 0) * cvmGet(H, 0, 1);
  if (det < 0)
    return false;

  const double N1 = sqrt(cvmGet(H, 0, 0) * cvmGet(H, 0, 0) + cvmGet(H, 1, 0) * cvmGet(H, 1, 0));
  if (N1 > 4 || N1 < 0.1)
    return false;

  const double N2 = sqrt(cvmGet(H, 0, 1) * cvmGet(H, 0, 1) + cvmGet(H, 1, 1) * cvmGet(H, 1, 1));
  if (N2 > 4 || N2 < 0.1)
    return false;

  const double N3 = sqrt(cvmGet(H, 2, 0) * cvmGet(H, 2, 0) + cvmGet(H, 2, 1) * cvmGet(H, 2, 1));
  if (N3 > 0.002)
    return false;

  return true;
}

EmguCV中是否有类似cvmget的方法?

1 个答案:

答案 0 :(得分:3)

cvmget函数返回单通道数组的元素。此功能是GetReal2D

的快速替代品

在EmguCV中,您可以使用cvGetReal2D类的CvInvoke方法

因此,您提供的链接中的代码应该是:

    bool niceHomography(Image<Gray, byte> H)
    {
        double det = CvInvoke.cvGetReal2D(H, 0, 0) * CvInvoke.cvGetReal2D(H, 1, 1) - CvInvoke.cvGetReal2D(H, 1, 0) * CvInvoke.cvGetReal2D(H, 0, 1);
        if (det < 0)
            return false;

        double N1 = Math.Sqrt(CvInvoke.cvGetReal2D(H, 0, 0) * CvInvoke.cvGetReal2D(H, 0, 0) + CvInvoke.cvGetReal2D(H, 1, 0) * CvInvoke.cvGetReal2D(H, 1, 0));
        if (N1 > 4 || N1 < 0.1)
            return false;

        double N2 = Math.Sqrt(CvInvoke.cvGetReal2D(H, 0, 1) * CvInvoke.cvGetReal2D(H, 0, 1) + CvInvoke.cvGetReal2D(H, 1, 1) * CvInvoke.cvGetReal2D(H, 1, 1));
        if (N2 > 4 || N2 < 0.1)
            return false;

        double N3 = Math.Sqrt(CvInvoke.cvGetReal2D(H, 2, 0) * CvInvoke.cvGetReal2D(H, 2, 0) + CvInvoke.cvGetReal2D(H, 2, 1) * CvInvoke.cvGetReal2D(H, 2, 1));
        if (N3 > 0.002)
            return false;

        return true;
    }



PS。确保您的阵列(图像)只有一个通道(灰度),否则将引发运行时错误。如果您的阵列有多个频道,请使用cvGet2D方法。

OpenCV文档:mGet