Contour detection python

The following code in python uses OpenCV library which is employed for image processing techniques. The program allows the detection of a specific color in a livestream video content. A video is composed of infinite frames at different time instants. We will detect the colour of every frame one by one. The code will only compile in linux environment. Make sure that openCV is installed in your system before you run the program.

For installation:. Type your sudo password and you will have installed OpenCV. This operation may take a long time due to the packages to be installed and the compilation process. This article is contributed by Pratima Upadhyay. If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute. See your article appearing on the GeeksforGeeks main page and help other Geeks. Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above.

Writing code in comment? Please use ide. Python program for Detection of a. Webcamera no 0 is used to capture the frames. VideoCapture 0. This drives the program into an infinite loop. Captures the live stream frame-by-frame. Here we are defining range of bluecolor in HSV. This creates a mask of blue coloured. The bitwise and of the frame and mask is done so. This displays the frame, mask. Destroys all of the HighGUI windows.Contours are defined as the line joining all the points along the boundary of an image that are having the same intensity.

Contours come handy in shape analysis, finding the size of the object of interest, and object detection. OpenCV has findContour function that helps in extracting the contours from the image. It works best on binary images, so we should first apply thresholding techniques, Sobel edges, etc. Output: We see that there are three essential arguments in cv2. First one is source image, second is contour retrieval mode, third is contour approximation method and it outputs the image, contours, and hierarchy.

Each individual contour is a Numpy array of x, y coordinates of boundary points of the object. Contours Approximation Method — Above, we see that contours are the boundaries of a shape with the same intensity. It stores the x, y coordinates of the boundary of a shape. But does it store all the coordinates? That is specified by this contour approximation method.

If we pass cv2. But actually, do we need all the points? For eg, if we have to find the contour of a straight line. We need just two endpoints of that line.

contour detection python

This is what cv2. It removes all redundant points and compresses the contour, thereby saving memory. If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute. See your article appearing on the GeeksforGeeks main page and help other Geeks. Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below. Writing code in comment?

Please use ide. Below is the code for finding contours —. Let's load a simple image with 3 black squares.

contour detection python

Canny gray, 30This is also used by more complex algorithm included into OpenCV. The following example show how to apply the Laplace algorithm on both a gray picture and a colour picture. As we can see lines and edges start appearing on resulting images. Sobel is a well-known algorithm used for contour detection. For more information about this algorithm check the wikpedia page. The small example below use the Sobel algorithm to put in evidence the contours of the build which works quite well.

Apply this filtersin this specific order has to effect to release all the contours and edges on a picture. This is based on the fact that comparison of an image and an eroded will mostly differ at edges location where the intensity of neighboor vary more.

As argument we can also provide a structuring element like a cross a diamond on which apply filters and also the number of iterations.

More iterations can give more precise contours but can also erase some. Canny is an algorithm made for edge detection. This is the base algorithm for any line edge or contour detection for his accuracy and his ease to use. The example presented below will show how to detect lines into an image with the canny algorithm. Note that the canny algoirthm use the sobel algorithm in the background. To detect lines on the image we will use the cv. The example show the result using the standard HoughLines and the probabilistic way.

Take a look at the documentation for more details. To do contours detection OpenCV provide a function called FindContours which intent to find contours in the image. Of course to some treatment should be applied to the picture in order to get a good contours detection. Then we apply the FindContours function to find contours and print them on the colour image even though we work on a grayscale version of the image.

The last feature we are interested in is the edge detection that will be put in action with the Harris algorithm. For more technicals details about this algorithm check the wikipedia page at this address. In this example we will apply the cv. CornerHarris to the image which return roughly the corners. Then various filters are applied to reduce raw corners to keep only on pixel for each corner from which we will retrieve the coordinates and then draw them on the original image.

CreateImage cv. GetSize im81 cv. CvtColor imgraycv. GetSize graycv. Laplace graydstaperture cv.In above image, you can see a variety of shapes cut out from pieces of construction paper. Before we start coding, make sure you have the imutils Python package installed on your system:.

We then take this image, load it from disk, and pre-process it by applying grayscale conversion, Gaussian smoothing using a 5 x 5 kernel, and finally thresholding Lines A call to cv2. Line 22 then grabs the appropriate tuple value based on whether we are using OpenCV 2.

You can read more about how the return signature of cv2. In computer vision and image processing, image moments are often used to characterize the shape of an object in an image. Notice how each of the shapes are successfully detected, followed by the center of the contour being computed and drawn on the image.

OpenCV Python Tutorial For Beginners 23 - Find and Draw Contours with OpenCV in Python

To be notified when these posts go live, be sure to enter your email address using the form below! All too often I see developers, students, and researchers wasting their time, studying the wrong things, and generally struggling to get started with Computer Vision, Deep Learning, and OpenCV.

I created this website to show you what I believe is the best possible way to get your start. You would have to copy and paste each command into IDLE one-by-one. There seems to be good support for opencv for shapes and finding centroids but are there equivalent routines for line detection. I have found this to be quite challenging especially discriminating between lots of small noise lines and what I think should be dominant significant lines. Line detection is much, much more challenging for a variety of reasons.

Where I wrong? I trying solve it but do not have luck. I use Python 2. It seems like both you and Ruttunenn are getting the same error message. It seems like the segmentation may not be perfect and there is some noise left over in the thresholding.

A simple check would be to use:.

Contour object detection

A simple work around was to implement a check for 0. Could you please explain a bit more why on the pre-processing stage you slightly blur the image??? Simply put, this allows us to ignore the details in the image and focus on what matters — the shapes. So by blurring, we smooth over less interesting regions of the image, allowing the thresholding and contour extraction phase to be more accurate. Would the centroid be inside the shape, or in the middle possibly blank area?

Great question. It would still be inside the shape, in the center, but towards the rim. An example can be found here. Keep in mind that only non-zero pixels are included in the calculation of the centroid. Hi Adrian, I have a question about the value of cX and cY.A contour is a closed curve joining all the continuous points having some color or intensity, they represent the shapes of objects found in an image.

Contour detection is a useful technique for shape analysis and object detection and recognition. In a previous tutorial, we have discussed about edge detection using Canny algorithm and we've seen how to implement it in OpenCVyou may ask, what's the difference between edge detection and contour detection? Well, when we perform edge detection, we find the points where the intensity of colors changes significantly and then we simply turn those pixels on.

However, contours are abstract collections of points and segments corresponding to the shapes of the objects in the image. As a result, we can manipulate contours in our program such as counting number of contours, using them to categorize the shapes of objects, cropping objects from an image image segmentation and much more.

Contour detection is not the only algorithm for image segmentation though, there are a lot others, such as the current state-of-the-art semantic segmentation, hough transform and K-Means segmentation. For a better accuracy, here is the whole pipeline that we gonna follow to successfully detect contours in an image:. Alright, let's get started. First, let's install the dependencies for this tutorial:.

Importing the necessary modules:. We gonna use this image for this tutorial:. Let's load it:. Converting it to RGB and then gray scale:.

As mentioned earlier in this tutorial, we gonna need to create a binary image, which means each pixel of the image is either black or white. This is a necessary in OpenCVfinding contours is like finding white object from black background, objects to be found should be white and the background should be black. The above code creates the binary image by disabling setting to 0 pixels which has a value of less than and turning on setting to the pixels which has a value of more thanhere is the output image:.

Now this is easy for OpenCV to detect contours:. The above code finds contours within the binary image and draw them with a thick green line to the image, let's show it:. To achieve good results on different and real world images, you need to tune your threshold value or perform edge detection.

For instance, for a pancakes image, I've decreased the threshold tohere is the result:. Alright, this is it for this tutorial, if you want to test this on your live camera, head to this link. Please check OpenCV's official documentation for more information.

Learning how to apply edge detection in computer vision applications using canny edge detector algorithm with OpenCV in Python. Hough transform is a popular feature extraction technique to detect any shape within an image. Detecting and recognizing human faces face detection in Python using OpenCV library that provides us with pre trained haar cascade classifiers.

Sharing is caring!

contour detection python

Follow ThePythonCode. Comment system is still in Beta, if you find any bug, please consider contacting us here. Your email address will not be published. Subscribe for our newsletter. Get Python Tutorials.Contours can be explained simply as a curve joining all the continuous points along the boundaryhaving same color or intensity. The contours are a useful tool for shape analysis and object detection and recognition. See, there are three arguments in cv. And it outputs a modified image, the contours and hierarchy.

Each individual contour is a Numpy array of x,y coordinates of boundary points of the object. To draw the contours, cv. It can also be used to draw any shape provided you have its boundary points.

Its first argument is source image, second argument is the contours which should be passed as a Python list, third argument is index of contours useful when drawing individual contour. To draw all contours, pass -1 and remaining arguments are color, thickness etc. This is the third argument in cv. What does it denote actually?

Above, we told that contours are the boundaries of a shape with same intensity. It stores the x,y coordinates of the boundary of a shape. But does it store all the coordinates? That is specified by this contour approximation method. If you pass cv. But actually do we need all the points? For eg, you found the contour of a straight line.

Do you need all the points on the line to represent that line? No, we need just two end points of that line. This is what cv.

It removes all redundant points and compresses the contour, thereby saving memory. Below image of a rectangle demonstrate this technique. Just draw a circle on all the coordinates in the contour array drawn in blue color. First image shows points I got with cv. See, how much memory it saves!!! Goal Understand what contours are. Learn to find contours, draw contours etc You will see these functions : cv. For better accuracy, use binary images. So before finding contours, apply threshold or canny edge detection.

Since OpenCV 3. 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. Let's see how to find contours of a binary image: import numpy as np.All the same Lynda. Plus, personalized course recommendations tailored just for you. All the same access to your Lynda learning history and certifications. Same instructors. New platform. Having explained how contours work, Patrick now shows how to generate and display contours found in an image.

This function call generates all the contours in an image and draws these outlines onto a displayed image—and even allows you to fill the areas. There are some additional settings and certain preprocessing you can do to improve or adjust the desired output of contours. Followed by cv2 dot and then in capitalized adaptive…underscore thresh underscore…gaussian,…g-a-u-s-s-i-a-n,…underscore c,…comma…and then we'll type cv2 dot…thresh…underscore binary…for the output threshold type…and then we'll type which indicates the area…over which the adaptive thresholding will apply…and then a value of one.

Chapter 5: Line, Edge and Contours Detection

Are you sure you want to mark all the videos in this course as unwatched? This will not affect your course history, your reports, or your certificates of completion for this course.

Type in the entry box, then click Enter to save your note. Start My Free Month. You started this assessment previously and didn't complete it. You can pick up where you left off, or start over. Develop in-demand skills with access to thousands of expert-led courses on business, tech and creative topics. Video: Contour object detection. You are now leaving Lynda. To access Lynda.

Visit our help center. Development Tools. Preview This Course. Resume Transcript Auto-Scroll. Author Patrick W. It is one of the most popular tools for facial recognition, used in a wide variety of security, marketing, and photography applications, and it powers a lot of cutting-edge tech, including augmented reality and robotics.

This course offers Python developers a detailed introduction to OpenCV 3, starting with installing and configuring your Mac, Windows, or Linux development environment along with Python 3. Learn about the data and image types unique to OpenCV, and find out how to manipulate pixels and images.

How to Detect Contours in Images using OpenCV in Python

Instructor Patrick W. Crawford also shows how to read video streams as inputs, and create custom real-time video interfaces. Then comes the real power of OpenCV: object, facial, and feature detection. Learn how to leverage the image-processing power of OpenCV using methods like template matching and machine learning data to identify and recognize features.

Topics include: Installing and configuring OpenCV Data types and structures Image types Manipulating pixels Scaling and rotating images Using video inputs Creating custom interfaces Thresholding Object detection Face and feature detection Template matching.

Skill Level Intermediate. Show More Show Less. Related Courses. Preview course.