我在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)。
| 归档时间: |
|
| 查看次数: |
11501 次 |
| 最近记录: |