2016-10-20 12 views
5

私はこのdtype問題を見つけ出し、いくつかの場合に役立つことを願っています。opencv cvtColor dtype問題(エラー:(-215))

img = cv2.imread("img.jpg"), 0) 
imgColor=cv2.cvtColor(img , cv2.COLOR_GRAY2BGR) 

をしかし、時にはあなたが最初の画像正規化してもよい:

img = cv2.imread("img.jpg"), 0)/255. 
imgColor=cv2.cvtColor(img , cv2.COLOR_GRAY2BGR) 

それは、このエラーになります:

error: (-215) depth == CV_8U || depth == CV_16U || depth == CV_32F in function >cv::cvtColor

に動作します。このような

通常、我々は変換します色、

ポイントは前者の例ではdtypeはuint8ですが、後者ではfloat64です。 1行追加し、これを修正するには:

img = cv2.imread("img.jpg"), 0)/255. 
img=img.astype(numpy.float32) 
imgColor=cv2.cvtColor(img , cv2.COLOR_GRAY2BGR) 
+0

これは、OpenCVではなく、除算によるnumpyの動作に固有の質問です。 – Miki

答えて

4

だから、これが解決されるが、他の関数、cv2.drawKeypoints(に関連している同様の問題だろうが)。

これは動作します。しかし

img = cv2.imread("img.jpg"), 1) 
img_out = numpy.copy(img) 
image_out = cv2.drawKeypoints(img,keypointList,img_out,(255,0,0),4) 

が、これはコンパイルされません:255またはその他によって再び

error: (-5) Incorrect type of input image.

、分裂:ここ

img = cv2.imread("img.jpg"), 1)/255.0 
img_out = numpy.copy(img) 
image_out = cv2.drawKeypoints(img,keypointList,img_out,(255,0,0),4) 

私たちは、このエラーが発生しています浮動小数値に変換される "img"で処理すると、 "img"はdrawKeypointsの正しい型になりません。ここにimg = img.astype(numpy.float32)を追加することは役に立ちません。入力画像imgの場合、uint8は機能しますが、float32は機能しません。私は文書でそのような要件を見つけることができませんでした。 cvtColorに関連する上記の問題とは異なることを混乱させ、「タイプ」について不平を言います。だから、それを動作させるために

:最後の行については

img = cv2.imread("img.jpg"), 1)/255.0 
img_out = numpy.copy(img) 
img=img.astype(numpy.uint8) 
image_out = cv2.drawKeypoints(img,keypointList,img_out,(255,0,0),4) 

、私はcv2.DRAW_RICH_KEYPOINTSフラグ(drawKeyPoints関数の最後の引数)として働くだろうと思いました。しかし、私が番号4を使用した場合にのみ、それは機能します。どんな説明も感謝します。

関連する問題