4

バイナリ マスクからデータを抽出しようとしています。すべてうまくいきますが、python に変更すると、データが数ピクセルシフトします。中心が見つからないので十分です。ただし、画像を保存すると、古いピクセルが正しい位置に表示されます

これが私のコードです。私は基本的に、出力として使用する通常のマットを作成します。ただし、ドキュメントに従ってマットが出力されます

データを適切に抽出していますか? もしそうなら教えてください。中心に沿って点が与えられた中心を見つけようとしています。私は自分のデータをシフトしたくありません。

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 に答える