Python opencv contour discovery function based on image edge extraction
2022-01-30 00:48:44 【Dream eraser】
Little knowledge , Great challenge ！ This article is participating in 「 A programmer must have a little knowledge 」 Creative activities
This article has participated in 「 Digging force Star Program 」 , Win a creative gift bag , Challenge creation incentive fund .
Python OpenCV 365 Day study plan , Go into the field of image with the eraser . This blog is the third in this series 36 piece .
In the image , The outline can be simply understood as connecting all continuous points with the same color （ The border ） The curve of , Contours can be used for shape analysis and object detection 、 Identification and other fields .
The principle of contour discovery ： Firstly, the target object is extracted by threshold segmentation , Then the contour of the target object is extracted by edge detection . An outline is a series of points （ Pixels ）, These points form an ordered set of points .
cv2.findContours Function can be used to detect the edge of an image .
Function prototype description
contours, hierarchy = cv2.findContours(image, mode, method[, contours[, hierarchy[, offset]]]) Copy code
I use Python OpenCV yes 4.0 Above version , If you're using 3.0 above , There may be a return value difference problem . The parameters are described as follows ：
image： The input image ;
mode： Contour retrieval mode , Please refer to the following text for details ;
method： Contour approximation method , For details, please refer to the following text ;
contours： The outline of the return ;
hierachy： Attributes corresponding to each contour ;
offset： Optional offset for each contour point movement .
image The parameter needs to be a binary graph , Not grayscale , The result is contour and hierarchy .
Contour retrieval mode , There are four kinds.
cv2.RETR_EXTERNAL： Indicates that only the outer contour is detected ;
cv2.RETR_LIST： Detected contour , Do not establish hierarchical relationships ;
cv2.RETR_CCOMP： Build two levels of outline , The upper layer is the outer boundary , The inner layer is the boundary information of the inner hole . If there is a connected object in the inner hole , The boundary of this object is also at the top ;
cv2.RETR_TREE： Create a hierarchical tree structure outline .
- Above , Can be found on this website ： Official website address
Contour approximation method
cv2.CHAIN_APPROX_NONE： Store all contour points , The pixel position difference between two adjacent points shall not exceed 1, namely
max(abs(x1-x2),abs(y2-y1))==1, It's not used in general ;
cv2.CHAIN_APPROX_SIMPLE： Compress the horizontal direction , vertical direction , Diagonal elements , Only the coordinates of the end point in this direction are reserved , For example, a rectangular outline only needs 4 Points to save profile information .
teh-Chinl chainThe approximate algorithm （ Didn't look for information to learn ）.
After understanding the above , You can apply the contour discovery function , The code is as follows ：
import cv2 as cv src = cv.imread("./both.jpeg") gray = cv.cvtColor(src, cv.COLOR_BGR2GRAY) ret, thresh = cv.threshold(gray, 150, 255, 0) cv.imshow("thresh",thresh) # Look for the outline contours, hierarchy = cv.findContours(thresh, cv.RETR_TREE, cv.CHAIN_APPROX_SIMPLE) Copy code
After the contour is found , And through
cv2.drawContours Function to draw the outline , The prototype of this function is as follows ：
image = cv2.drawContours(image, contours, contourIdx, color[, thickness[, lineType[, hierarchy[, maxLevel[, offset]]]]]) Copy code
The parameters are described as follows ：
image： The input image ;
contours： outline , stay Python There is a list, Namely
cv2.findContoursThe point set found by the function , A list of ;
contourIdx： Index of contour , Specifies the sketch profile list Which outline in the , To draw all the outlines , Please deliver -1;
color： Color ;
thickness： The thickness of the , If it is -1, Indicates filling ;
lineType： Linetype ;
hierarchy： Optional information for the hierarchy ;
maxLevel： The maximum level at which the outline is drawn ,0： Draw only the specified profile ,1： Draw the profile and all nested profiles ,2： Draw the outline , All nested profiles , All nested to nested contours ;
offset： Contour offset parameters .
The test code and running results are as follows ：
import cv2 as cv # help(cv.drawContours) src = cv.imread("./both.jpeg") gray = cv.cvtColor(src, cv.COLOR_BGR2GRAY) ret, thresh = cv.threshold(gray, 150, 255, 0) cv.imshow("thresh",thresh) # Look for the outline contours, hierarchy = cv.findContours(thresh, cv.RETR_TREE, cv.CHAIN_APPROX_SIMPLE) # print(contours) # print(hierarchy) # Draw the outline cv.drawContours(src,contours,-1,(200,0,150),2) cv.imshow('src',src) cv.waitKey(0) Copy code
author[Dream eraser],Please bring the original link to reprint, thank you.
The sidebar is recommended
- Install tensorflow and python 3.6 in Windows 7
- Python collects and monitors system data -- psutil
- Getting started with Python - object oriented - special methods
- Teach you how to use Python to transform an alien invasion game
- You can easily get started with Excel. Python data analysis package pandas (VI): sorting
- Implementation of top-level design pattern in Python
- Using linear systems in python with scipy.linalg
- How to get started quickly? How to learn Python
- Modifying Python environment with Mac OS security
- Better use atom to support jupyter based Python development
guess what you like
Better use atom to support jupyter based Python development
Fast power modulus Python implementation of large numbers
Python architects recommend the book "Python programmer's Guide" which must be read by self-study Python architects. You are welcome to take it away
Decoding the verification code of Taobao slider with Python + selenium, the road of information security
Python game development, pyGame module, python implementation of skiing games
Python collects and monitors system data -- psutil
Python + selenium automated test: page object mode
You can easily get started with Excel. Python data analysis package pandas (IV): any grouping score bar
Opencv skills | saving pictures in common formats as transparent background pictures (with Python source code) - teach you to easily make logo
Python ThreadPoolExecutor restrictions_ work_ Queue size
- Python generates and deploys verification codes with one click (Django)
- With "Python" advanced, you can catch all the advanced syntax! Advanced function + file operation, do not look at regret Series ~
- At the beginning of "Python", you must see the series. 10000 words are only for you. It is recommended to like the collection ~
- [Python kaggle] pandas basic exercises in machine learning series (6)
- Using linear systems in python with scipy.linalg
- The founder of pandas teaches you how to use Python for data analysis (mind mapping)
- Using Python to realize national second-hand housing data capture + map display
- Python image processing, automatic generation of GIF dynamic pictures
- Pandas advanced tutorial: time processing
- How to make Python run faster? Six tips!
- Django: use of elastic search search system
- Python 3.10 official release
- Python chat room (Tkinter writing interface, streaming, socket to realize private chat, group chat, check chat records, Mysql to store data)
- This pandas exercise must be successfully won
- [algorithm learning] sword finger offer 64 Find 1 + 2 +... + n (Java / C / C + + / Python / go / trust)
- leetcode 58. Length of Last Word（python）
- Problems encountered in writing the HTML content of articles into the database during the development of Django blog
- Understand Python's built-in function and add a print function yourself
- Python implements JS encryption algorithm in thousands of music websites
- leetcode 35. Search Insert Position（python）
- leetcode 1829. Maximum XOR for Each Query（python）
- [introduction to Python visualization]: 12 small examples of complete data visualization, taking you to play with visualization ~
- Learning this Python library can reduce at least 100 lines of code
- leetcode 67. Add Binary（python）
- Regular re parameter replacement of Python 3 interface automation test framework
- V. pandas based on Python
- Only 15 lines of code is needed for face detection! (using Python and openCV)
- [Python crawler Sao operation] you can crawl Sirius cinema movies without paying
- leetcode 69. Sqrt(x)（python）
- Teach you to read the source code of Cpython (I)
- Snowball learning started in the fourth quarter of Python. One needs three meals. I have a new understanding of Python functional programming, process-oriented, object-oriented and functional
- leetcode 88. Merge Sorted Array（python）
- Don't you know more about a python library before the end of 2021?
- Python crawler web page parsing artifact XPath quick start teaching!!!
- Use Python and OpenCV to watermark the image
- String and related methods of Python data type introduction
- Heapq module of Python module
- Introduction to beautiful soup of Python crawler weapon, detailed explanation, actual combat summary!!!
- Event loop of Python collaboration series
- Django docking pin login system