首页 > TAG信息列表 > findContours
Opencv学习笔记(五)
本次笔记的内容主要是实现对形状的检查,使用Opencv中的函数实现图片中图形的监测。 1、首先开始对原始图形进行预处理。 String path="../shapes.png"; Mat img; img=imread(path); cvtColor(img,imgGray,COLOR_BGR2GRAY); GaussianBlur(imgGray,imgBlur,Size(3,3),3,0); CanfindContours:ValueError: too many values to unpack (expected 2)
@[TOC](findContours:ValueError: too many values to unpack (expected 2)) contours, hierarchy = cv2.findContours(bw, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_NONE)#函数更改了 contours=sorted(contours, key=len) cnt = contours[-1] print('轮廓:') print(cnt.shapecv2.findContours()
cv2.findContours()中model和method记录: mode: cv2.RETR_EXTERNAL 只检测外轮廓信息 cv2.RETR_LIST 输出的轮廓间无等级关系,以list形式输出轮廓信息 cv2.RETR_CCOMP 输出两层轮廓信息,即内外两个边界. 上面一 层为外边界,里面一层为内孔的边界信息 cv2.RETR_TREE 以树结构opencv-python轮廓检测:findContours
findContours函数参数: image:需要查找轮廓的图片,图片为二值图像 mode:查找轮廓的模式: cv2.RETR_EXTERNAL 只检测外轮廓 cv2.RETR_LIST 检测轮廓但不建立等级关系 cv2.RETR_CCOMP 建立具有两个等级关系的轮廓 cv2.RETR_TREE 建立具有树形等级结构的轮廓TypeError: Layout of the output array image is incompatible 问题解决
本周在使用findContours的过程中遇到了以下问题: TypeError: Layout of the output array image is incompatible with cv::Mat (step[ndims-1] != elemsize or step[1] != elemsize*nchannels) 感谢这篇文章:https://www.jianshu.com/p/cc3f4baf35bb,引导我往正确的方向进行思考opencv使用cv2.findContours()和cv2.drawContours()实现轮廓检测
cv2.findContours()函数 cv2.findContours(image, mode, method[, contours[, hierarchy[, offset ]]]) 返回两个值:contours:hierarchy。 参数 1、image:寻找轮廓的图像; 2、mode:表示轮廓的检索模式,有四种: cv2.RETR_EXTERNAL:表示只检测外轮廓,包含在外围轮廓内的内围轮廓被忽Opencv发现轮廓findContours
函数原型 findContours(InputOutputArray image, OutputArrayOfArrays contours, OutputArray hierarchy, int mode, int method, Point offset = Point()); 参数1:二值图像; 参数2: 轮廓的集合,有点像C#的LIst<List<Point>> contours定义为“vector<vector<Point>python调用cv2.findContours时报错:ValueError: not enough values to unpack (expected 3, got 2)
OpenCV旧版,返回三个参数: im2, contours, hierarchy = cv2.findContours(mask, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE) 要想返回三个参数: 把OpenCV 降级成3.4.3.18 就可以了,在终端输入pip install opencv-python==3.4.3.18 OpenCV 新版调用,返回两个参数: contours, hierarchy =OPENCV学习之findContours()轮廓检索模式区别
建立轮廓索引时,按照轮廓从小到大分配索引号。 RECT_EXTERNAL只检测最外层轮廓。 RECT_LIST检测所有轮廓。 这两种模式不建立轮廓等级关系,不管轮廓嵌套与否,均按照轮廓大小依次分配索引。 RECT_CCOMP,RECT_TREE检测所有轮廓 RECT_CCOMP在有轮廓嵌套时,无论嵌套个数多少,只建立两级findContours()函数
函数原型 findContours(InputOutputArray image, OutputArrayOfArrays contours, OutputArray hierarchy, int mode, int method, Point offset = Point()); 参数1:单通道图像矩阵,可以是灰度图,但更常用的是二值图像,一般是经过Canny、拉普拉斯等边缘检测算子处理过的python--图像轮廓findContours
为更精确的准确率,使用二值图 未完。。。。。