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 的问题,因为我注意到当我尝试打印数据时数据已经转移。如果您需要更多信息,请询问

感谢您的时间

4

2 回答 2

4

Mat 和 MatND 之间似乎没有更多区别。MatND 现在已过时。

通过查看 opencv2/core.hpp(版本 2.4.8):

typedef Mat MatND;
于 2014-10-23T05:49:06.130 回答
2

当我使用 findcontours 或这个矩阵时,我了解到数据的方向是不同的。

该矩阵使用高度 X 宽度,而轮廓放置为宽度 X 高度。我讨厌阅读 api。

于 2012-07-09T16:53:46.387 回答