opencv opencv contrib

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扩展。

猜你喜欢

转载自blog.csdn.net/Fan0920/article/details/126525374