OpenCv の python ラッパーの問題で立ち往生しています。黒いピクセルの数がしきい値よりも大きい場合に 1 を返すこの関数があります
def checkBlackPixels( img, threshold ):
width = img.width
height = img.height
nchannels = img.nChannels
step = img.widthStep
dimtot = width * height
data = img.imageData
black = 0
for i in range( 0, height ):
for j in range( 0, width ):
r = data[i*step + j*nchannels + 0]
g = data[i*step + j*nchannels + 1]
b = data[i*step + j*nchannels + 2]
if r == 0 and g == 0 and b == 0:
black = black + 1
if black >= threshold * dimtot:
return 1
else:
return 0
ループ (特定の画像の各ピクセルをスキャンする) は、入力が RGB 画像の場合はうまく機能しますが、入力が単一チャネル画像の場合、次のエラーが発生します。
for j in range( width ):
TypeError: Nested sequences should have 2 or 3 dimensions
入力単一チャネル画像 (次の例では「rg」と呼ばれます) は、cvSplit と cvAbsDiff で処理された「src」と呼ばれる RGB 画像から取得されます。
cvSplit( src, r, g, b, 'NULL' )
rg = cvCreateImage( cvGetSize(src), src.depth, 1 ) # R - G
cvAbsDiff( r, g, rg )
また、問題が cvSplit から取得した差分画像に起因することにも既に気付きました...
誰でも私を助けることができますか?ありがとうございました