在Python中使用OpenCV findContours

Kai*_*ira 10 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)
Run Code Online (Sandbox Code Playgroud)

但它显示如下错误.

cv2.error:..../opencv/modules/imgproc/src/contours.cpp:198:错误:( - 210)[开始]当模式时,FindContours仅支持CV_8UC1图像!= CV_RETR_FLOODFILL否则仅在函数cvStartFindContours中支持CV_32SC1图像.

小智 4

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

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

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