我正在尝试从二进制掩码中提取数据。一切顺利,但更改为python将导致数据移动几个像素。这已经足够让我无法找到中心。但是,保存图像将足以在正确的位置显示像素
这是我的代码。我基本上创建了一个普通的mat用作输出。然而,根据文档
输出了一个匹配我是否正确提取数据?如果是这样告诉我。我试图找到沿着中心给定点的中心。我小孩不想让我的数据被转移。
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的问题,因为我注意到当我尝试打印数据时数据已经移位了。如果您需要更多信息,请询问
感谢您的时间
答案 0 :(得分:4)
似乎Mat和MatND之间没有更多的区别。 MatND现在已经过时了。
通过查看opencv2 / core.hpp(版本2.4.8):
typedef Mat MatND;
答案 1 :(得分:2)
当我使用findcontours或这个矩阵时,我了解到数据的方向是不同的。
此矩阵使用高度X宽度,而轮廓放置为宽度X高度。我讨厌读api。