1

ここでノブ。

形状とサイズが異なる既知の数のブロブを含む (一種の) バイナリ イメージがあります。ブロブ インデックスに相当する各ブロブのピクセル値。最大の 5 つのブロブのみを (モーメントを使用して) 処理したいと思います。

現時点では、接続されたすべてのピクセルを反復処理して変数をインクリメントし、各ブロブの面積を取得しています (以下のコードを参照)。次に、必要に応じて最大のブロブのみを処理しますが、このピクセル反復法は Python では非常に低速です。

 for i in range(1, objectCount):
            zm=0.0
            for h in range(im.height):
                for w in range(im.width):
                    pixVal = cv.Get2D(im, h, w)
                    if (pixVal[0] == i):
                        zm=zm+1
            objectArea.append([int(zm)])

これを行うより速い方法はありますか?

4

2 に答える 2

2

上記を置き換えるコードは次のとおりです。

hist = cv.CreateHist([255], cv.CV_HIST_ARRAY, [[0,255]], 1)
cv.CalcHist([im] , hist)          
for h in range(255):
    zm = cv.QueryHistValue_1D(hist, h)
    objectArea.append([int(zm)])
于 2012-10-04T10:32:56.687 に答える
1

ピクセル値はブロブ ID に対応しているため、画像のヒストグラムを計算し、上位 5 列のみを選択して、これらすべてのピクセルの反復を回避できます。

ヒストグラムを計算するには、OpenCV のcalcHistメソッドを使用できます。

こちらが使用例です。

于 2012-10-03T12:31:51.107 に答える