OpenCV4.5.2(+opencv_contrib)+CMake3.20.1+vs2017重新编译

OpenCV4.5.2(+opencv_contrib)+CMake3.20.1+vs2017重新编译

本文仅做学习使用,若侵权,请留言删除
参考文献:
Windows下 Cmake + VS 编译 OpenCV (+ opencv_contribute)源码
OpenCV3.4.1+opencv_contrib编译:windows 10
win10下利用cmake和vs重新编译opencv源码
opencv编译之后找不到opencv_worldxxx.lib的原因
编译支持CUDA的Opencv4.2

OpenCV下载地址:https://opencv.org/releases/

opencv_contrib下载地址:https://github.com/opencv/opencv_contrib

20240206更新如下:
下载OpenCV460和opencv_contrib460用vs2019(vc16)和cmake3.28.3重新按照下列步骤编译,在输入wo查找BUILD_opencv_world时选择勾选,编译成功。

1、下载解压OpenCV452:

重新编译的理由是因为我们在用C++调用OpenCV时会碰到某些库文件没有的情况。所以一般自己下载源码,根据自己的需求生成依赖库会好一些,在这里我们下载Source源码:
在这里插入图片描述

下载完成后右键解压:
在这里插入图片描述

解压缩后将文件夹放入C盘并以版本号命名:
在这里插入图片描述

解压缩后里面内容如下,同时创建一个rebuild文件夹:
在这里插入图片描述
Win+R开启cmd后进入该文件夹,同时输入cmake-gui,可调用CMake:
在这里插入图片描述

首先点击Browse Source按键选择OpenCV452文件夹路径:
在这里插入图片描述

然后点击Browse Build按键选择OpenCV452/rebuild文件夹路径:
在这里插入图片描述

继续点击config,下拉选择自己的VS版本后,选择x64,点击Finish:
在这里插入图片描述

最后编译开始,在红框处可以看见变动:
在这里插入图片描述

这里第一次config的完成后,search 中查找一些参数进行相应操作:

输入wo查找BUILD_opencv_world,不要勾选,因为据说安装了anaconda会导致编译引入不正确,不能生成opencv_worldxxx.lib文件,
在这里插入图片描述

输入mo查找OPENCV_EXTRA_MODULES_PATH:将opencv_contrib文件下的modules的路径加入
在这里插入图片描述

输入NON朝招OPENCV_ENABLE_NONFREE勾选:
在这里插入图片描述
输入SET查找OPENCV_GENERATE_SETUPVARS不勾选:
在这里插入图片描述
输入test查找OPENCV_PERF_TESTS、BUILD_TESTS、BUILD_opencv_python_tests不勾选:
在这里插入图片描述
输入java查找BUILD_JAVA、BUILD_opencv_java_bingdings_generator不勾选:
在这里插入图片描述
输入python查找BUILD_opencv_python3、BUILD_opencv_python_bingdings_generator不勾选:
在这里插入图片描述
这些操作完成后,再次点击Configure,若上面仍有红色则再一次Configure直到没有为止:
在这里插入图片描述
此时contrib附加库会需要下载一些文件,一般会下载失败,我们需要找到rebuild文件下的CMakeDownloadLog.txt,其中各解释如下:
在这里插入图片描述
我们需要通过下载源地址将文件放在文件暂存路径里面,命名则是MD5_文件名。其中 .cmake 和 .i 文件需要右击另存为来保存。所有缓存文件在源文件下的 .cache 文件夹中:
在这里插入图片描述
操作完成后再次点击Configure:
在这里插入图片描述
此时在该区域不再爆红,则可以进行Generate操作:
在这里插入图片描述
出现 1 后,点击 2 ,下一步就是用VS进行源码编译

2、用vs2017编译OpenCV源代码

在Generate之后,我们进入opencv/rebuild文件下,可以看到工程文件,双击sln文件打开vs2017
在这里插入图片描述
打开vs2017页面如下,此时有两种模式:Debug和Release,在解决方案中找到CMakeTargets:
在这里插入图片描述
第一种模式Debug:选中CMakeTargets中的ALL_BUILD,右击生成或者重新生成:
在这里插入图片描述
在这里插入图片描述

完成后转换为Release模式,执行相同操作:
在这里插入图片描述

在Debug和Release两个版本都生成好以后,点击INSTALL右击——仅用于项目——仅生成INSTALL:
在这里插入图片描述

其下是我踩过的坑,按以上操作应该不会有坑:

vs2015编译OpenCV错误总结如下:

d:\users\humeme\desktop\opencv452\modules\dnn\misc\tensorflow\op_def.pb.h(17): fatal error C1189: #error:  This file was generated by an older version of protoc which is (编译源文件 D:\Users\humeme\Desktop\opencv452\modules\dnn\misc\tensorflow\op_def.pb.cc)
            
解决方案:这是由于anaconda没有安装TensorFlow,安装上就可以。

            
严重性	代码	说明	项目	文件	行	禁止显示状态
错误	C1189	#error:  This file was generated by an older version of protoc which is (编译源文件 D:\Users\humeme\Desktop\opencv440\modules\dnn\src\onnx\onnx_graph_simplifier.cpp)	opencv_world	D:\Users\humeme\Desktop\opencv440\modules\dnn\misc\onnx\opencv-onnx.pb.h	17	

解决方案:这里是由于勾选了 BUILD_opencv_world 选项导致anaconda导入文件混乱,最好不勾选,需要的lib一个个导入。同时也有人说不需要生成opencv_worldxxxd.lib,因为实际工程中会造成大量的冗余

OpenCV配置VS实例验证:

新建项目Ctrl+Shift+N啊,重新命名以及选择文件保存路径:
在这里插入图片描述

在项目右边选择解决方案资源管理器:
在这里插入图片描述
点击源文件右击选择添加——新建项,新建cpp文件并命名:
在这里插入图片描述

新建后输入以下代码,注意修改图片的路径:

#include "opencv2/core/utility.hpp"
#include "opencv2/imgproc.hpp"
#include "opencv2/imgcodecs.hpp"
#include "opencv2/highgui.hpp"

#include <stdio.h>

using namespace cv;
using namespace std;

int edgeThresh = 1;
Mat image, gray, edge, cedge;

// define a trackbar callback
static void onTrackbar(int, void*)
{
	blur(gray, edge, Size(3, 3));

	// Run the edge detector on grayscale
	Canny(edge, edge, edgeThresh, edgeThresh * 3, 3);
	cedge = Scalar::all(0);

	image.copyTo(cedge, edge);
	imshow("Edge map", cedge);
}

static void help()
{
	printf("\nThis sample demonstrates Canny edge detection\n"
		"Call:\n"
		"   /.edge [image_name -- Default is ../data/fruits.jpg]\n\n");
}

const char* keys =
{
	"{help h||}{@image |../data/fruits.jpg|input image name}"

};

int main(int argc, const char** argv)
{
	CommandLineParser parser(argc, argv, keys);
	if (parser.has("help"))
	{
		help();
		return 0;
	}
	//!!!!这里将 filename 换成你自己图片的绝对路径就可以了,只要修改这一处!!!!
	string filename = "D:/VSCODE/canny_detect/111.png";


	image = imread(filename, 1);
	if (image.empty())
	{
		printf("Cannot read image file: %s\n", filename.c_str());
		help();
		return -1;
	}
	cedge.create(image.size(), image.type());
	cvtColor(image, gray, COLOR_BGR2GRAY);

	// Create a window
	namedWindow("Edge map", 1);

	// create a toolbar
	createTrackbar("Canny threshold", "Edge map", &edgeThresh, 100, onTrackbar);

	// Show the image
	onTrackbar(0, 0);

	// Wait for a key stroke; the same function arranges events processing
	waitKey(0);
	system("pause");
	return 0;
}


选择属性管理器双击Microsoft.Cpp.x64.user:
在这里插入图片描述

选择VC++目录——包含目录:

D:\Users\humeme\Desktop\rebuild\install\include
D:\Users\humeme\Desktop\rebuild\install\include\opencv2

在这里插入图片描述

选择VC++目录——库目录
在这里插入图片描述

链接器——输入
在这里插入图片描述

opencv_aruco440.lib
opencv_aruco440d.lib
opencv_bgsegm440.lib
opencv_bgsegm440d.lib
opencv_bioinspired440.lib
opencv_bioinspired440d.lib
opencv_calib3d440.lib
opencv_calib3d440d.lib
opencv_ccalib440.lib
opencv_ccalib440d.lib
opencv_core440.lib
opencv_core440d.lib
opencv_datasets440.lib
opencv_datasets440d.lib
opencv_dnn440.lib
opencv_dnn440d.lib
opencv_dnn_objdetect440.lib
opencv_dnn_objdetect440d.lib
opencv_dnn_superres440.lib
opencv_dnn_superres440d.lib
opencv_dpm440.lib
opencv_dpm440d.lib
opencv_face440.lib
opencv_face440d.lib
opencv_features2d440.lib
opencv_features2d440d.lib
opencv_flann440.lib
opencv_flann440d.lib
opencv_fuzzy440.lib
opencv_fuzzy440d.lib
opencv_gapi440.lib
opencv_gapi440d.lib
opencv_hdf440.lib
opencv_hdf440d.lib
opencv_hfs440.lib
opencv_hfs440d.lib
opencv_highgui440.lib
opencv_highgui440d.lib
opencv_imgcodecs440.lib
opencv_imgcodecs440d.lib
opencv_imgproc440.lib
opencv_imgproc440d.lib
opencv_img_hash440.lib
opencv_img_hash440d.lib
opencv_intensity_transform440.lib
opencv_intensity_transform440d.lib
opencv_line_descriptor440.lib
opencv_line_descriptor440d.lib
opencv_ml440.lib
opencv_ml440d.lib
opencv_objdetect440.lib
opencv_objdetect440d.lib
opencv_optflow440.lib
opencv_optflow440d.lib
opencv_phase_unwrapping440.lib
opencv_phase_unwrapping440d.lib
opencv_photo440.lib
opencv_photo440d.lib
opencv_plot440.lib
opencv_plot440d.lib
opencv_quality440.lib
opencv_quality440d.lib
opencv_rapid440.lib
opencv_rapid440d.lib
opencv_reg440.lib
opencv_reg440d.lib
opencv_rgbd440.lib
opencv_rgbd440d.lib
opencv_saliency440.lib
opencv_saliency440d.lib
opencv_shape440.lib
opencv_shape440d.lib
opencv_stereo440.lib
opencv_stereo440d.lib
opencv_stitching440.lib
opencv_stitching440d.lib
opencv_structured_light440.lib
opencv_structured_light440d.lib
opencv_superres440.lib
opencv_superres440d.lib
opencv_surface_matching440.lib
opencv_surface_matching440d.lib
opencv_text440.lib
opencv_text440d.lib
opencv_tracking440.lib
opencv_tracking440d.lib
opencv_video440.lib
opencv_video440d.lib
opencv_videoio440.lib
opencv_videoio440d.lib
opencv_videostab440.lib
opencv_videostab440d.lib
opencv_xfeatures2d440.lib
opencv_xfeatures2d440d.lib
opencv_ximgproc440.lib
opencv_ximgproc440d.lib
opencv_xobjdetect440.lib
opencv_xobjdetect440d.lib
opencv_xphoto440.lib
opencv_xphoto440d.lib

将以上lib复制进去后一路确定退出。

最后点击生成——生成解决方案,在点击调试开始执行结果如下:
在这里插入图片描述

  • 5
    点赞
  • 48
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值