我在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中。
答案 0 :(得分:2)
看起来评论中已经回答了这个问题,但只是为了将问题标记为已回答:
CV_8UC1表示8位像素,无符号,只有一个通道,因此为灰度。看起来你正在用3色通道或CV_8UC3读它。您可以通过打印img.dtype
和img.shape
来检查图像类型。 dtype应为uint8,形状应为(#,#),表示两个维度。我猜你会看到你的图像的形状打印(#,#,3),表示三个颜色通道。
正如@ user3515225所说,你可以通过使用cv2.imread('img.png', cv2.IMREAD_GRAYSCALE)
以灰度级读取图像来解决这个问题。但是,假设您在其他任何地方都没有使用颜色。如果您想要图像的单独灰度副本,请将gray = img.copy()
替换为gray = cv2.cvtColor(img, cv2.COLOR_RGB2GRAY)
。