opencv_contrib模块编译与安装

前言

由于opencv_contrib模块的安装依赖于opencv基础模块,所以看该教程前请先看一遍上一篇OpenCV基础模块安装教程

下载

下载 opencv_contrib模块(需要与opencv基础模块版本号4.6.0相同,国内可以在gitcode下载

配置、编译、安装

打开cmake-gui,选择【OpenCV基础模块】的源码路径(不是contrib模块),再选择新的编译输出路径build/contrib,然后点击configure,等待结束。
在这里插入图片描述

完成后,【在基础模块的配置上】继续设置下面几个配置:

  1. 设置contrib模块路径 xxxx/opencv_contrib-4.6.0/modules(注意要包含modules)
    image-20230513163704147

  2. 勾选 nonfree(允许使用带专利的算法)
    image-20230513163853739

重新点击configure,然后等待,这时又会下载很多东西,不出意外又会报红,因此接下来又需要手动下载了。【下载方式见文章最后-configure报红解决办法

下载完毕、重命名且放到对应文件夹后,依次执行下面步骤:

  1. 点击configure,然后generate
  2. 关闭cmake-gui,在 build/contrib目录下打开cmd
  3. 在cmd输入命令 mingw32-make -j7 开始编译(通常需要30分钟以上)

编译完成即可使用命令 mingw32-make install 进行安装, 然后添加环境变量(注意是把含有.dll的bin目录添加到环境变量)

configure报红解决办法

方法一、手动下载

进入 build/contrib 目录,打开【CMakeDownloadLog.txt】文件,找到所有含有 “cmake_download” 的行, 单独复制到一个文件中,方便后面对照下载。

如:

#cmake_download "D:/xxxx/opencv460/opencv/sources/.cache/xfeatures2d/vgg/7cd47228edec52b6d82f46511af325c5-vgg_generated_80.i" "https://raw.githubusercontent.com/opencv/opencv_3rdparty/fccf7cd6a4b12079f73bbfb21745f9babcd4eb1d/vgg_generated_80.i"
# 第2个链接是文件下载位置,第1个链接则是下载文件并重命名后保存的位置

对着每一条下载链接,把所有 raw.githubusercontent.com 都改为 raw.staticdn.net 后再去下载。

下载完成按照第1个链接描述那样,重命名并保存到指定位置。

方法二、写个Python脚本自动下载

【附】:写了个python脚本自动下载缺少的文件,安装了python以及requests库的可以用该脚本进行下载(注意,有个 .dat文件较大,请自行下载)

import requests
import os


def getItemUrls(fpath):
    items = []
    with open(fpath, 'r') as f:
        lines = f.readlines()
        for line in lines:
            if('cmake_download' in line):
                line = line.strip().replace('"', '')
                linfo = line.split()
                fileSavePath = linfo[1]
                url = linfo[2].replace(
                    'raw.githubusercontent.com', 'raw.staticdn.net')
                item = dict(file=fileSavePath, url=url)
                items.append(item)
    return items


def save(savepath, content):
    with open(savepath, 'wb') as f:
        f.write(content)


print('请输入 CMakeDownloadLog.txt 的文件路径',
      r'比如D:\opencv\sources\build\release\CMakeDownloadLog.txt', sep='\n')
fp = input(': ')

items = getItemUrls(fp)

for i in range(len(items)):
    item = items[i]
    if(item["url"][-3:] == "dat"):
        print(f"i={
      
      i} --> 文件过大,请自行前往{
      
      item['url']}\n并保存为 {
      
      item['file']}")
        continue
    os.makedirs('/'.join(item['file'].split('/')[:-1]), exist_ok=True)
    try:
        r = requests.get(item['url'], timeout=20)
    except:
        print(f"i={
      
      i} --> 下载失败,请自行前往{
      
      item['url']}\n并保存为 {
      
      item['file']}")
        continue
    save(item['file'], r.content)
    print(f'i={
      
      i} --> 已下载')
    
print("【下载结束】")

猜你喜欢

转载自blog.csdn.net/m0_46079750/article/details/130660446