opencv contrib
https://github.com/opencv/opencv_contrib/releases/tag/4.5.5
opencv
https://github.com/opencv/opencv/releases/tag/4.5.5
OpenCV是一个开源的计算机视觉库,提供了许多图像处理和计算机视觉算法,以及一些机器学习工具。而OpenCV Contrib是OpenCV社区贡献的一组扩展模块,包含了一些较为新颖和实用的算法和工具函数。
OpenCV库包含了核心模块和扩展模块。核心模块提供了一些基础的图像处理和计算机视觉算法,如图像读取和保存、图像预处理、特征检测和匹配、物体跟踪等。扩展模块则提供了一些高级的图像处理和计算机视觉算法,如人脸识别、物体检测、深度学习等。而OpenCV Contrib是OpenCV的扩展模块之一,它包含了一些实用的算法和工具函数,如光流、分割、双目视觉、三维重建等。
在使用OpenCV时,如果需要使用OpenCV Contrib中的算法或工具函数,需要单独安装并编译OpenCV Contrib模块。OpenCV Contrib模块的安装方法取决于你使用的操作系统和编译器,具体可以参考OpenCV官方文档。
以下是一个示例代码,演示了如何使用OpenCV Contrib中的一个算法:
#include <opencv2/opencv.hpp>
#include <opencv2/xfeatures2d.hpp>
#include <iostream>
using namespace std;
using namespace cv;
using namespace cv::xfeatures2d;
int main()
{
// 读取图像
Mat img1 = imread("img1.jpg");
Mat img2 = imread("img2.jpg");
// 创建SIFT特征检测器
Ptr<SIFT> detector = SIFT::create();
// 检测关键点和计算描述子
vector<KeyPoint> keypoints1, keypoints2;
Mat descriptors1, descriptors2;
detector->detectAndCompute(img1, Mat(), keypoints1, descriptors1);
detector->detectAndCompute(img2, Mat(), keypoints2, descriptors2);
// 匹配关键点
BFMatcher matcher(NORM_L2);
vector<vector<DMatch>> knn_matches;
matcher.knnMatch(descriptors1, descriptors2, knn_matches, 2);
// 筛选匹配结果
vector<DMatch> good_matches;
for (int i = 0; i < knn_matches.size(); i++) {
if (knn_matches[i][0].distance < 0.7 * knn_matches[i][1].distance) {
good_matches.push_back(knn_matches[i][0]);
}
}
// 绘制匹配结果
Mat img_matches;
drawMatches(img1, keypoints1, img2, keypoints2, good_matches, img_matches);
// 显示匹配结果
namedWindow("Matches", WINDOW_NORMAL);
imshow("Matches", img_matches);
waitKey(0);
return 0;
}
OpenCV和OpenCV Contrib的主要区别是OpenCV Contrib包含了一些不是在OpenCV核心库中实现的功能,例如深度学习框架的支持、面部识别、三维重建等等。这些功能都是通过OpenCV的插件方式实现的,因此需要单独安装。
使用OpenCV时,可以使用cv2
模块来调用核心功能,例如图像读取、显示、处理、特征提取等。使用OpenCV Contrib时,需要先安装OpenCV Contrib扩展,并使用cv2.contrib
模块来调用其功能。
下面是一个简单的示例代码,展示了如何使用OpenCV和OpenCV Contrib加载并显示一张图像:
import cv2
import cv2.contrib
# 加载图像
img = cv2.imread('test.jpg')
# 显示图像
cv2.imshow('image', img)
cv2.waitKey(0)
cv2.destroyAllWindows()
# 使用OpenCV Contrib中的DNN模块加载深度学习模型
net = cv2.contrib.dnn.readNet('model.pb')
# 对图像进行目标检测
blob = cv2.dnn.blobFromImage(img, scalefactor=1/255.0, size=(416, 416), swapRB=True, crop=False)
net.setInput(blob)
outs = net.forward()
在这个示例代码中,我们首先使用OpenCV的imread
函数加载了一张图像,并使用imshow
函数显示了该图像。接下来,我们使用OpenCV Contrib中的dnn
模块加载了一个深度学习模型,并使用该模型对图像进行了目标检测。
需要注意的是,如果想要使用OpenCV Contrib中的功能,需要在安装OpenCV时选择安装Contrib模块,或者单独安装OpenCV Contrib扩展。