【问题标题】:OpenCV findContours in pythonpython中的OpenCV findContours
【发布时间】:2016-04-15 11:34:22
【问题描述】:

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

【问题讨论】:

  • 您的图像是 8 位无符号字符吗?或者你可以写 'img=imread('grainimage.png',0)' 转换成灰度。

标签: python opencv3.0


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 2012-12-14
    • 2016-07-06
    • 2020-12-21
    • 1970-01-01
    • 2012-06-05
    • 1970-01-01
    • 1970-01-01
    • 2017-01-12
    • 1970-01-01
    相关资源
    最近更新 更多