2012-06-24 44 views
3

我想從二進制掩碼中提取數據。一切順利,但更改爲python將導致數據移動幾個像素。這足以讓我找不到中心。然而,保存圖像將足以陳舊的像素在正確的位置mat和matND有什麼區別?

這是我的代碼。我基本上創建了一個普通的mat來作爲輸出。然而,根據文檔輸出matnd

我是否正確提取數據?如果是這樣告訴我。我試圖找到沿中心給出點的中心。我kidda不希望我的數據被轉移。

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

Mat和MatND似乎沒有更多的區別。 MatND現已過時。

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

typedef Mat MatND; 
2

我得知數據的方向是不同的,當我使用findcontours或此矩陣。

該矩陣使用高度X寬度,而輪廓放置爲寬度X高度。我討厭閱讀apis。