2016-01-11 19 views
8

私はopenCV 3.0のpythonで作業しています。最大の白画素領域を見つけるために、最初に閾値処理されたグレー画像を2値画像に割り当てる。PythonのOpenCV findContours

import cv2 

import numpy as np 

img = cv2.imread('graimage.png') 

img = cv2.resize(img,(400,500)) 

gray = img.copy() 

(thresh, im_bw) = cv2.threshold(img, 0, 255, cv2.THRESH_BINARY) 

derp,contours,hierarchy = cv2.findContours(im_bw,cv2.RETR_LIST,cv2.CHAIN_APPROX_SIMPLE) 

cnts = max(cnts, key=cv2.contourArea) 

ただし、次のようにエラーが表示されます。

cv2.error: ..../opencv/modules/imgproc/src/contours.cpp:198: error: (-210) [Start]FindContours supports only CV_8UC1 images when mode != CV_RETR_FLOODFILL otherwise supports CV_32SC1 images only in function cvStartFindContours.

+7

画像は8ビットの符号なしの文字ですか?または、 'img = imread(' grainimage.png '、0)'と書いてグレースケールに変換することもできます。 – user3515225

+0

ありがとう、それは働いた。 – Kaira

答えて

0

これはコメントで答えましたが、答えとして問題だけをマークするように見えます:

CV_8UC1は8ビットピクセル、符号なしの、そして唯一のチャネルなので、グレースケールを意味します。 3色のチャンネル、またはCV_8UC3で読み込んでいるようです。画像タイプは、img.dtypeimg.shapeで確認できます。 dtypeはuint8でなければならず、シェイプは2つの次元を示す(#、#)でなければなりません。私は、3つのカラーチャンネルを示すあなたのイメージのためにその形のプリント(#、#、3)をそのまま見ることになると思います。

@ user3515225で述べたように、画像をグレースケールでcv2.imread('img.png', cv2.IMREAD_GRAYSCALE)を使って読み取ると修正できます。それはあなたが他のどこの色にも使うことがないと仮定します。あなたは、画像の別々のグレースケールコピーをしたい場合は、代わりにgray = cv2.cvtColor(img, cv2.COLOR_RGB2GRAY)gray = img.copy()を交換してください。

関連する問題