Skip to content
Related Articles

Related Articles

Improve Article
Transition from OpenCV 2 to OpenCV 3.x
  • Difficulty Level : Basic
  • Last Updated : 18 Aug, 2020

OpenCV is one of the most popular and most used Computer vision libraries. It contains tools to carry out image and video processing.

When OpenCV 3..4.1 is an improved version of OpenCV 2.4 as it introduced new algorithms and features. Although some of the existing modules were rewritten and moved to sub-modules.  In this articles, I will focus on the changes made in the existing modules of OpenCV 2.4 and how they can be implemented in OpenCV 3.4.1.

Feature Detection

Some of the feature detection algorithms (FREAK, BRIEF, SIFT and SURF) have been moved to opencv_contrib repository and xfeatures2d module. SIFT and SURF algorithms are patented by their creators and are non-free. Although they can be used for educational and research purposes.

SIFT : Create SIFT feature detector object.

# OpenCV 2.4
sift = cv2.SIFT()
# OpenCV 3.4.1
sift = cv2.xfeatures2d.SIFT_create()

SURF : Create SURF feature detector object

# OpenCV 2.4
surf = cv2.SURF()
# OpenCV 3.4.1
surf = cv2.xfeatures2d.SURF_create()

FAST : Create FAST detector object

# OpenCV 2.4
fast = cv2.FastFeatureDetector()
# OpenCV 3.4.1
fast = cv2.FastFeatureDetector_create()

ORB : Create ORB detector object

# OpenCV 2.4
orb = cv2.ORB()
# OpenCV 3.4.1
orb = cv2.ORB_create()

Simple Blob Detector

# OpenCV 2.4
detector = cv2.SimpleBlobDetector()
# OpenCV 3.4.1
detector = cv2.SimpleBlobDetector_create()


OpenCV uses Hough Gradient Method to detect circles that uses gradient information of the edges.

# OpenCV 3.4.1
circles = cv2.HoughCircles(img, cv2.HOUGH_GRADIENT, 4, 10)

The name of the method has been changed from CV_HOUGH_GRADIENT in 2.4 version to HOUGH_GRADIENT in 3.4 version.


Initially the findContours() function returned only two parameters in OpenCV 2.4 . In OpenCV 3.2 onwards, the function was modified to return three parameters i.e. the modified image, contours and hierarchy.

# OpenCV 2.4
contours, hierarchy = cv2.findContours(img, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_NONE)
# OpenCV 3.4.1
im, contours, hierarchy = cv2.findContours(img, cv2.RETR_EXTERNAL, 

These were a few important changes that could be useful while migrating the code from OpenCV 2 .4 to OpenCV 3.x .

 Attention geek! Strengthen your foundations with the Python Programming Foundation Course and learn the basics.  

To begin with, your interview preparations Enhance your Data Structures concepts with the Python DS Course. And to begin with your Machine Learning Journey, join the Machine Learning – Basic Level Course

My Personal Notes arrow_drop_up
Recommended Articles
Page :