1

以下のコードには、8 ビット整数の numpy 配列があります。それらにしきい値を適用したいので、 を呼び出します。ドキュメントは、関数が 未満のすべてのセルでcv2.threshold(img,128,1,cv2.THRSH_TOZERO)[1]の値を持つ配列を返し、すべてのセルで より大きいか等しい元の値を持つ配列を返す必要があることを示しています。0128128

cv2.thresholdさらに奇妙なのは、異なるセルの同じ値に対して異なる動作をしたように見えることです。

In [48]:img
Out[48]: 
array([[128, 128, 128, ..., 133, 133, 133],
       [128, 128, 128, ..., 134, 134, 134],
       [128, 128, 128, ..., 136, 136, 136],
       ..., 
       [132, 132, 132, ..., 128, 128, 128],
       [132, 132, 132, ..., 128, 128, 128],
       [132, 132, 132, ..., 128, 128, 128]], dtype=uint8)

In [49]:imgThresh=cv2.threshold(img,128,1,cv2.THRESH_TOZERO)[1]

In[50]:imgThresh
Out[50]: 
array([[  0,   0,   0, ...,   0, 151, 133],
       [  0,   0,   0, ...,   0, 151, 133],
       [  0,   0,   0, ...,   0, 151, 133],
       ..., 
       [  0,   0,   0, ...,   0, 151, 133],
       [  0,   0,   0, ...,   0, 151, 133],
       [  0,   0,   0, ...,   0, 151, 133]], dtype=uint8)

この種の動作を引き起こしている可能性のあるものについて何か考えはありますか?

編集:私はUbuntu 12.04で実行しており、ドキュメントのインストール指示に従いました 。また、リクエストごとに、より単純化された変更を追加しています...動作しているようです。そのことをどうすればよいかわからない In 1 :import numpy, cv2

In[2]:img=numpy.random.randint(0,255,(100,100)).astype(numpy.uint8)



In[3]:img
Out[3]: 
array([[122, 192, 125, ..., 224, 138, 157],
       [ 46,  90,  33, ...,  95, 251,  24],
       [238,  87, 113, ...,  60, 190, 175],
       ..., 
       [ 30,  33, 100, ..., 182, 123,  79],
       [ 84, 180,  34, ...,  37,  52, 194],
       [ 94,  51,  96, ..., 243,  69, 241]], dtype=uint8)

In[4]:img1=cv2.threshold(img,244,1,cv2.THRESH_TOZERO)
In[5]:
Out[5]:
(244.0,
 array([[  0,   0,   0, ...,   0,   0,   0],
       [  0,   0,   0, ...,   0, 251,   0],
       [  0,   0,   0, ...,   0,   0,   0],
       ..., 
       [  0,   0,   0, ...,   0,   0,   0],
       [  0,   0,   0, ...,   0,   0,   0],
       [  0,   0,   0, ...,   0,   0,   0]], dtype=uint8))
4

1 に答える 1

1

現在のバージョンでは、最近のバージョンのいくつかで私が知る限り、それは返されます

  • img(x,y), if img(x,y)>thresh
  • 0、それ以外

OpenCV ドキュメント

したがってcv2.threshold(img,128,1,cv2.THRSH_TOZERO)、128 のすべての値が 0 に設定されます。128 のままにしたい場合は、 を使用しますcv2.threshold(img,129,1,cv2.THRSH_TOZERO)

同じ入力に対して異なる値が得られるという事実は、インストールが壊れていることを意味する可能性があります。OpenCV とどの OS をどのようにインストールしましたか? どのバージョンを使用していますか? コードの AC バージョンを試しましたか?

次のコードでエラーを再現しようとしました。そして、私にとってはすべてが順調です。次のコードを試して、出力を投稿していただけますか。

import numpy,cv2
img=numpy.random.randint(0,255,(100,100)).astype(numpy.uint8)
img1=cv2.threshold(img,128,1,cv2.THRESH_TOZERO)
于 2013-06-29T06:03:44.377 に答える