私はopenCVの初心者で、このエラーに解決策がありません。私はこのコードを使用してBGRからグレースケール形式に画像を変換しようとしています-
img = cv2.imread('path//to//image//file')
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
これはうまく機能しているようです。 img
変数のデータ型を確認しました。これはnumpy ndarrayであり、shapeは(100,80,3)
。ただし、numpy ndarrayデータ型のコードに既に存在し、cvtColor
関数への入力と同じ次元のイメージを提供すると、次のエラーが発生します。
Error: Assertion failed (depth == 0 || depth == 2 || depth == 5) in cv::cvtColor, file D:\Build\OpenCV\opencv-3.4.1\modules\imgproc\src\color.cpp, line 11109
cv2.error: OpenCV(3.4.1) D:\Build\OpenCV\opencv-3.4.1\modules\imgproc\src\color.cpp:11109: error: (-215) depth == 0 || depth == 2 || depth == 5 in function cv::cvtColor
2番目のケースのコードは(ここでカスタムnp.ndarrayを作成します)-
img = np.full((100,80,3), 12)
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
誰でもこのエラーの原因とその修正方法を明確にできますか?
これは、numpy配列が正しいデータ型で構成されていないためです。デフォルトでは、タイプ_np.int64
_(64ビット)の配列を作成しますが、cv2.cvtColor()
には8ビット(_np.uint8
_)または16ビット(_np.uint16
_)が必要です。これを修正するには、np.full()
関数を変更してデータ型を含めます。
img = np.full((100,80,3), 12, np.uint8)
初期イメージをソースとして使用して新しいnumpy配列を初期化し、dtype=np.uint8
:
img = cv2.imread('path//to//image//file')
import numpy as np
img = np.array(img, dtype=np.uint8)
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
_cv2.imread
_によって返されるnumpy配列のデータ型が_uint8
_であるため、エラーが発生しました。これは、np.full()
によって返されるnumpy配列のデータ型とは異なります。データ型をuint8にするには、dtype
パラメーターを追加します-
_img = np.full((100,80,3), 12, dtype = np.uint8)
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
_