什么是mat和matND之间的区别?

4
我正在尝试从二进制掩码中提取数据。一切都很顺利,但是转换到Python会导致数据向右移动几个像素。这足以使我无法找到中心。然而,保存图像将在正确的位置显示像素,这很奇怪。
以下是我的代码。我基本上创建一个正常的矩阵用作输出。但是根据文档,输出了matnd。
如果我正确地提取了数据,请告诉我。我试图通过中心点找到中心。我不想让我的数据发生偏移。
import cv2.cv as cv

def main():

   imgColor = cv.LoadImage(OPTICIMAGE, cv.CV_LOAD_IMAGE_COLOR)
   center, radius = centerandradus(imgColor)

def centerandradus(cvImg, ColorLower=None,ColorUpper=None):
   lowerBound = cv.Scalar(130, 0, 130);
   upperBound = cv.Scalar(171, 80, 171);
   size =  cv.GetSize(cvImg)

   output = cv.CreateMat(size[0],size[1],cv.CV_8UC1)
   cv.InRangeS(cvImg, lowerBound, upperBound,output)
   mask = np.asarray( output[:,:] )
   x,y = np.nonzero(mask)
   x, y = np.array(x),np.array(y)
   h,k  =  centerEstimate(x,y)
   return np.array([h,k]), radius

def centerEstimate(xList,yList):
   x_m = np.mean( np.r_[xList])
   y_m = np.mean( np.r_[yList])
   return x_m, y_m

编辑:我认为这个问题与matND有关,因为当我尝试打印数据时,我注意到数据已经被移位了。如果您需要更多信息,请询问。

谢谢您的时间。

2个回答

4

看起来Mat和MatND之间已经没有区别了。MatND现在已经过时。

从opencv2/core.hpp(版本2.4.8)中可以看出:

typedef Mat MatND;

2
我了解到当我使用findcontours或此矩阵时,数据的方向是不同的。 这个矩阵使用高度X宽度,而轮廓则将其作为宽度X高度。我讨厌阅读应用程序接口。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接