绘制轮廓 cv2.findContours函数及参数解释

news/2024/11/15 3:24:51/

cv2 绘制轮廓

  • cv2.findContours()
  • 注意事项
  • mode参数
  • method参数
  • offset:(可选参数)
  • 返回值

cv2.findContours()

def findContours(image, mode, method, contours=None, hierarchy=None, offset=None): 
# real signature unknown; restored from __doc__"""findContours(image, mode, method[, contours[, hierarchy[, offset]]]) -> contours, hierarchy.   @brief Finds contours in a binary image..   .   The function retrieves contours from the binary image using the algorithm @cite Suzuki85 . The contours.   are a useful tool for shape analysis and object detection and recognition. See squares.cpp in the.   OpenCV sample directory..   @note Since opencv 3.2 source image is not modified by this function..   .   @param image Source, an 8-bit single-channel image. Non-zero pixels are treated as 1's. Zero.   pixels remain 0's, so the image is treated as binary . You can use #compare, #inRange, #threshold ,.   #adaptiveThreshold, #Canny, and others to create a binary image out of a grayscale or color one..   If mode equals to #RETR_CCOMP or #RETR_FLOODFILL, the input can also be a 32-bit integer image of labels (CV_32SC1)..   @param contours Detected contours. Each contour is stored as a vector of points (e.g..   std::vector<std::vector<cv::Point> >)..   @param hierarchy Optional output vector (e.g. std::vector<cv::Vec4i>), containing information about the image topology. It has.   as many elements as the number of contours. For each i-th contour contours[i], the elements.   hierarchy[i][0] , hierarchy[i][1] , hierarchy[i][2] , and hierarchy[i][3] are set to 0-based indices.   in contours of the next and previous contours at the same hierarchical level, the first child.   contour and the parent contour, respectively. If for the contour i there are no next, previous,.   parent, or nested contours, the corresponding elements of hierarchy[i] will be negative..   @param mode Contour retrieval mode, see #RetrievalModes.   @param method Contour approximation method, see #ContourApproximationModes.   @param offset Optional offset by which every contour point is shifted. This is useful if the.   contours are extracted from the image ROI and then they should be analyzed in the whole image.   context."""pass

注意事项

1.输入为二值图像,黑色为背景,白色为目标

2.该函数会修改原图像,因此若想保留原图像在,则需拷贝一份,在拷贝图里修改。

mode参数

参数名称功能
cv2.RETR_EXTERNAL只检测外轮廓
cv2.RETR_LIST检测的轮廓不建立等级关系,都是同级
cv2.RETR_CCOMP建立两个等级的轮廓,上面一层为外边界,里面一层为内孔的边界信息
cv2.RETR_TREE建立一个等级树结构的轮廓

method参数

参数名称功能
cv2.CHAIN_APPROX_NONE存储所有边界点
cv2.CHAIN_APPROX_SIMPLE压缩垂直、水平、对角方向,只保留端点
cv2.CHAIN_APPROX_TX89_L1使用teh-Chini近似算法
cv2.CHAIN_APPROX_TC89_KCOS使用teh-Chini近似算法

offset:(可选参数)

offset:轮廓点的偏移量,格式为tuple,如(-10,10)表示轮廓点沿X负方向偏移10个像素点,沿Y正方向偏移10个像素点

返回值

contours:轮廓点。列表格式,每一个元素为一个3维数组(其形状为(n,1,2),其中n表示轮廓点个数,2表示像素点坐标),表示一个轮廓

hierarchy:轮廓间的层次关系,为三维数组,形状为(1,n,4),其中n表示轮廓总个数,4指的是用4个数表示各轮廓间的相互关系。第一个数表示同级轮廓的下一个轮廓编号,第二个数表示同级轮廓的上一个轮廓的编号,第三个数表示该轮廓下一级轮廓的编号,第四个数表示该轮廓的上一级轮廓的编号。

# ## -*- coding: utf-8 -*-
import cv2
import imutils
import numpy as npdef RGB_GRAY(img):img = cv2.resize(img, (640, 480))gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)gray = cv2.bilateralFilter(gray, 13, 15, 15)return img, graydef edge(img):#  cv2.Canny(source_image,thresholdValue 1,thresholdValue 2)edged = cv2.Canny(img, 30, 200)cv2.imshow('img', edged)cv2.waitKey(0)contours = cv2.findContours(edged.copy(), cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE)contours = imutils.grab_contours(contours)contours = sorted(contours, key=cv2.contourArea, reverse=True)[:10]return contoursdef solve(img):img, gray = RGB_GRAY(img)contours = edge(gray)if __name__ == '__main__':img_path = './22222.jpg'img = cv2.imread(img_path)solve(img)

http://www.ppmy.cn/news/325383.html

相关文章

opencv:图像轮廓检测 cv2.findContours() 与 cv2.drawContours()

1 cv2.findContours() OpenCV-Python接口中使用cv2.findContours()函数来查找检测物体的轮廓。 cv2.findContours(image, mode, method, contoursNone, hierarchyNone, offsetNone)参数描述返回image寻找轮廓的图像&#xff0c;注意输入的图片必须为二值图片。若输入的图片为…

cv2.findContours()返回函数详解

对于cv2.findContours() 函数&#xff0c;相信很多人都在使用&#xff0c;利用其进行轮廓的寻找&#xff0c;之后利用cnt[num]&#xff0c;对第num个轮廓进行操作&#xff0c;但是该函数返回的三个参数具体表示的是什么呢&#xff1f; 下面就进行详细介绍&#xff0c;为了能够…

OpenCv查找轮廓-cv2.findContours()函数

contours, hier cv2.findContours(img,mode,method) 参数&#xff1a; 1. img: 要寻找轮廓的图像 2. mode&#xff1a;轮廓的检索模式(四种&#xff09; 1.cv2.RETR_EXTERNAL 表示只检测外轮廓 2.cv2.RETR_LIST 检测的轮廓不建立等级关系 3.cv2.RETR_CCOMP 建立两个等级的轮…

图像轮廓检索函数cv2.findContours

findContours findContours函数主要作用是从二值图中检索轮廓。 用法 import cv2cv2.findContours(image, mode, method[, contours[, hierarchy[, offset]]])参数 image&#xff1a;8-bit单通道图像。该图像会将非0像素值视为1&#xff0c;0像素值视为0&#xff0c;因此也…

在cv2.findContours函数使用中,报ValueError: not enough values to unpack (expected 3, got 2)

cv2.findContours()函数 cv2.findContours(image, mode, method[, contours[, hierarchy[, offset ]]]) 其中 第一个参数是需要寻找轮廓的图像&#xff1b; 第二个参数是轮廓的检索模式&#xff0c;有四种方式&#xff1a; cv2.RETR_EXTERNAL表示只检测外轮廓cv2.RETR_LIST检…

cv2.cv2.findContours opencv-python

cv2.findContours用于轮廓检测&#xff0c;其输入为二值图像 输入&#xff1a; 有三个输入参数&#xff1a;输入图像&#xff08;二值图像&#xff09;&#xff0c;轮廓检索方式&#xff0c;轮廓近似方法 轮廓检索方式 mode 含义 cv2.RETR_EXTERNAL 只检测外轮廓信息 cv2.RETR…

python-opencv2利用cv2.findContours()函数来查找检测物体的轮廓

版权声明&#xff1a;本文为CSDN博主「hjxu2016」的原创文章&#xff0c;遵循CC 4.0 BY-SA版权协议&#xff0c;转载请附上原文出处链接及本声明。 原文链接&#xff1a;https://blog.csdn.net/hjxu2016/article/details/77833336 轮廓检测 轮廓检测也是图像处理中经常用到的…

cv2.threshold()、cv2.findContours(),cv2.findContours图片轮廓处理

参数及含义cv2.threshold threshold(src, thresh, maxval, type[, dst]) -> retval, dst&#xff0c;第一个返回值是**阈值**的float型&#xff0c;第二个返回值是图片像素处理后的结果。cv2.threshold(img,threshold,maxval,type) img:必须是灰度图&#xff0c;是8-bit或3…