mirror of
https://github.com/opencv/opencv.git
synced 2025-08-06 14:36:36 +08:00
Merge pull request #8150 from cclauss/patch-1
cv2.findContours() no longer modifies source image (#8150) * cv2.findContours() no longer modifies source image Since OpenCV 3.2, cv2.findContours() no longer modifies the source image but returns a modified image as the first of three return parameters. ??? Do I have that correct ??? Also fixed up the code blocks to be valid markdown. * ```python --> @code{.py} Enables syntax highlighting in docs.
This commit is contained in:
parent
7c3b415d6a
commit
a347569350
@ -17,8 +17,7 @@ detection and recognition.
|
||||
|
||||
- For better accuracy, use binary images. So before finding contours, apply threshold or canny
|
||||
edge detection.
|
||||
- findContours function modifies the source image. So if you want source image even after
|
||||
finding contours, already store it to some other variables.
|
||||
- Since OpenCV 3.2, findContours() no longer modifies the source image but returns a modified image as the first of three return parameters.
|
||||
- In OpenCV, finding contours is like finding white object from black background. So remember,
|
||||
object to be found should be white and background should be black.
|
||||
|
||||
@ -28,12 +27,12 @@ import numpy as np
|
||||
import cv2
|
||||
|
||||
im = cv2.imread('test.jpg')
|
||||
imgray = cv2.cvtColor(im,cv2.COLOR_BGR2GRAY)
|
||||
ret,thresh = cv2.threshold(imgray,127,255,0)
|
||||
im2, contours, hierarchy = cv2.findContours(thresh,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE)
|
||||
imgray = cv2.cvtColor(im, cv2.COLOR_BGR2GRAY)
|
||||
ret, thresh = cv2.threshold(imgray, 127, 255, 0)
|
||||
im2, contours, hierarchy = cv2.findContours(thresh, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
|
||||
@endcode
|
||||
See, there are three arguments in **cv2.findContours()** function, first one is source image, second
|
||||
is contour retrieval mode, third is contour approximation method. And it outputs the contours and
|
||||
is contour retrieval mode, third is contour approximation method. And it outputs a modified image, the contours and
|
||||
hierarchy. contours is a Python list of all the contours in the image. Each individual contour is a
|
||||
Numpy array of (x,y) coordinates of boundary points of the object.
|
||||
|
||||
@ -49,15 +48,15 @@ contours which should be passed as a Python list, third argument is index of con
|
||||
drawing individual contour. To draw all contours, pass -1) and remaining arguments are color,
|
||||
thickness etc.
|
||||
|
||||
To draw all the contours in an image:
|
||||
* To draw all the contours in an image:
|
||||
@code{.py}
|
||||
cv2.drawContours(img, contours, -1, (0,255,0), 3)
|
||||
@endcode
|
||||
To draw an individual contour, say 4th contour:
|
||||
* To draw an individual contour, say 4th contour:
|
||||
@code{.py}
|
||||
cv2.drawContours(img, contours, 3, (0,255,0), 3)
|
||||
@endcode
|
||||
But most of the time, below method will be useful:
|
||||
* But most of the time, below method will be useful:
|
||||
@code{.py}
|
||||
cnt = contours[4]
|
||||
cv2.drawContours(img, [cnt], 0, (0,255,0), 3)
|
||||
|
Loading…
Reference in New Issue
Block a user