web-dev-qa-db-ja.com

OpenCVエラー-cv2.cvtcolor

私は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) 

誰でもこのエラーの原因とその修正方法を明確にできますか?

9
Shalabh Singh

これは、numpy配列が正しいデータ型で構成されていないためです。デフォルトでは、タイプ_np.int64_(64ビット)の配列を作成しますが、cv2.cvtColor()には8ビット(_np.uint8_)または16ビット(_np.uint16_)が必要です。これを修正するには、np.full()関数を変更してデータ型を含めます。

img = np.full((100,80,3), 12, np.uint8)

14
D.Griffiths

初期イメージをソースとして使用して新しい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)
2
A.Ametov

_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)
_
2
Shalabh Singh