📜  从 OpenCV 2 过渡到 OpenCV 3.x

📅  最后修改于: 2022-05-13 01:54:40.921000             🧑  作者: Mango

从 OpenCV 2 过渡到 OpenCV 3.x

OpenCV 是最流行和最常用的计算机视觉库之一。它包含执行图像和视频处理的工具。

当 OpenCV 3..4.1 是 OpenCV 2.4 的改进版本时,它引入了新的算法和特性。虽然一些现有的模块被重写并移动到子模块。在本文中,我将重点介绍 OpenCV 2.4 现有模块中所做的更改以及如何在 OpenCV 3.4.1 中实现它们。

特征检测

一些特征检测算法(FREAK、BRIEF、SIFT 和 SURF)已移至 o pencv_contrib 存储库xfeatures2d模块。 SIFT 和 SURF 算法由其创建者获得专利,并且是非免费的。尽管它们可以用于教育和研究目的。

SIFT:创建 SIFT 特征检测器对象。

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

SURF :创建 SURF 特征检测器对象

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

FAST :创建 FAST 检测器对象

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

ORB :创建 ORB 检测器对象

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

简单的斑点检测器

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

圆检测

OpenCV 使用霍夫梯度法来检测使用边缘梯度信息的圆。

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

该方法的名称已从 2.4 版本中的CV_HOUGH_GRADIENT更改为 3.4 版本中的HOUGH_GRADIENT

轮廓

最初findContours()函数在 OpenCV 2.4 中只返回两个参数。从 OpenCV 3.2 开始,该函数被修改为返回三个参数,即修改后的图像、轮廓和层次结构。

# 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, 
                                           cv2.CHAIN_APPROX_NONE)

这些是在将代码从 OpenCV 2 .4 迁移到 OpenCV 3.x 时可能有用的一些重要更改。