在Python中使用OpenCV findContours

时间:2016-01-11 08:15:27

标签: python opencv3.0

我在openCV 3.0上使用python。为了找到最大的白色像素区域,首先将阈值灰度图像转换为二值图像。

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:错误:( - 210)[开始]当模式时,FindContours仅支持CV_8UC1图像!= CV_RETR_FLOODFILL否则仅支持CV_32SC1图像在函数cvStartFindContours中。

1 个答案:

答案 0 :(得分:2)

看起来评论中已经回答了这个问题,但只是为了将问题标记为已回答:

CV_8UC1表示8位像素,无符号,只有一个通道,因此为灰度。看起来你正在用3色通道或CV_8UC3读它。您可以通过打印img.dtypeimg.shape来检查图像类型。 dtype应为uint8,形状应为(#,#),表示两个维度。我猜你会看到你的图像的形状打印(#,#,3),表示三个颜色通道。

正如@ user3515225所说,你可以通过使用cv2.imread('img.png', cv2.IMREAD_GRAYSCALE)以灰度级读取图像来解决这个问题。但是,假设您在其他任何地方都没有使用颜色。如果您想要图像的单独灰度副本,请将gray = img.copy()替换为gray = cv2.cvtColor(img, cv2.COLOR_RGB2GRAY)