pythonでopencvを使用していて、バイナリイメージ(dtype = bool)を保存したいのですが、単にcv2.imwriteを使用すると、次のエラーが発生します。
TypeError: image data type = 0 is not supported
誰かがこれを手伝ってくれますか?画像は基本的に後でマスクとして機能することになっています。
あなたはこれを使うことができます:
cv2.imwrite('mask.png', maskimg * 255)
したがって、これは暗黙的に整数に変換されます。これにより、False
に0、True
に1が与えられ、255で乗算されて(ビット)マスクが作成されます。 OpenCVは非常に寛容であり、int64
8ビット深度の画像(例:uint16
16ビット深度の画像)。操作はnotで行われるため、maskimg
を使用してインデックス作成などを行うことができます。
バイナリイメージを 'uint8'データ型に変換します。
これを試して:
>>> binary_image.dtype='uint8'
>>> cv2.imwrite('image.png', binary_image)
いいえOpenCV
は、ブールndarrayの形式のバイナリイメージを想定していません。 OpenCV
はnp.uint8
、np.float32
、np.float64
のみをサポートします。OpenCVは画像操作ライブラリに近いため、ブール値を持つ画像は、 RGB
またはグレースケール形式。
バイナリマトリックスを格納するための最もコンパクトなデータ型はuchar
またはdtype=np.uint8
であるため、np.bool
の代わりにこのデータ型を使用する必要があります。
OpenCVを使用している場合は、画像の脱穀にhsv形式の使用を検討する必要があります。 cv2.cvtColor()
を使用してBGRイメージをHSVに変換し、cv2.inRange()
関数を使用してイメージにしきい値を設定します。
Hue(h)、Saturation(s)、Value(v)の上限と下限の値が必要になります。このためには、 このスクリプト を使用するか、それを参照として使用して独自に作成します。
このスクリプトは、ライブビデオストリーム入力のhsv下限値と上限値を返すことを目的としていますが、少し調整するだけで、画像入力でも同じことができます。
取得したバイナリ(種類)画像をcv2.imwrite()
を使用して保存します。このバイナリイメージをマスキングにも使用できます。それでも疑問が残っている場合は、 このスクリプト を参照すると、ほとんどの問題が解決されます。
ndarray.astype('bool')
このページを参照してください。
https://docs.scipy.org/doc/numpy-1.13.0/reference/generated/numpy.ndarray.astype.html