1.准备工具
visual studio2019
cmake-gui
opencv3.4.5+opencv_contrib-3.4.5源码
2.源码处理
1.源码下载后的目录如下,放在一个还有较多空间的位置,这个编译后比较大:
2.打开cmake-gui.exe,将opencv3.4.5源码位置填入,将构建输出文件位置也填入
3.点击configure按钮,选择自己的版本,我这里选择2019,然后finish
这里会出现一些问题:ffmpeg、ippicv、face_landmark_model.dat这些无法下载导致错误
这里需要大家在github上下载对应版本的文件(我这里的链接是3.4.5的)
例如:ffmpeg下载失败,找到自己的opencv3.4.5的源码路径,在里面有3rdparty文件夹,打开里面有各个第三方库的文件,找到ffmpeg文件夹,打开ffmpeg.cmake文件,在第一行就可以看到需要的文件版本。
将下面三个文件下载后拷贝到自己的opencv3.4.5的源码目录中的==.cache==中,并且重命名为对应的三个文件,前半部分是hash码。
同理:找到ippicv文件夹中的ippicv.cmake,找到对用的版本windows下的x86_64,在github上找到对应版本并下载到.cache文件夹中重命名即可。
face_landmark_model.dat fail这个错误需要在文件的CMakeLists.txt中修改(其实前面的也可以,修改的是xx.cmake文件),打开xxx\opencv_contrib-3.4.5\modules\face文件夹,修改其中CMakeLists.txt。添加具体的下载路径
"https://raw.githubusercontent.com/opencv/opencv_3rdparty/8afa57abc8229d611c4937165d20e2a2d9fc5a12/face_landmark_model.dat"
完整代码如下
ocv_download(
FILENAME face_landmark_model.dat
HASH ${__file_hash}
URL
"${OPENCV_FACE_ALIGNMENT_URL}"
"$ENV{OPENCV_FACE_ALIGNMENT_URL}"
"https://raw.githubusercontent.com/opencv/opencv_3rdparty/8afa57abc8229d611c4937165d20e2a2d9fc5a12/face_landmark_model.dat"
"https://raw.githubusercontent.com/opencv/opencv_3rdparty/${__commit_hash}/"
DESTINATION_DIR "${CMAKE_BINARY_DIR}/${OPENCV_TEST_DATA_INSTALL_PATH}/cv/face/"
ID "data"
RELATIVE_URL
STATUS res
)
3.编译选择
首先在buiild选项中找到build_opencv_world(这里是将opencv的库文件打包,方便后续导入,不需要一个个导入)
其次,在opencv的选项中勾选nonfree选项,并且添加opencv_contrib-3.4.5/modules的路径
最后进行confingure和generate
3.源码编译
点击open project打开项目,如下点击生成,注意有debug和release两个版本,自己看需要编译
然后设置install为启动项,生成一些列后续使用的工具。
4.opencv库的使用
配置项目中opencv的头文件以及lib库文件,同时将对应的dll文件拷贝到可执行程序的同级目录下,例如opencv_world345d.dll或者opencv_world345.dll
在项目的属性页中配置:如下图
5.测试代码
#include <opencv2/opencv.hpp>
#include <opencv2/xfeatures2d.hpp>
int main() {
// 读取图片
cv::Mat image = cv::imread("path_to_your_image.jpg");
// 检查是否成功读取图片
if (image.empty()) {
std::cout << "无法读取图片" << std::endl;
return -1;
}
// 使用SIFT算法检测关键点
cv::Ptr<cv::xfeatures2d::SIFT> sift = cv::xfeatures2d::SIFT::create();
std::vector<cv::KeyPoint> keypoints;
sift->detect(image, keypoints);
// 在图像上绘制关键点
cv::Mat image_with_keypoints;
cv::drawKeypoints(image, keypoints, image_with_keypoints);
// 创建窗口并显示图片
cv::namedWindow("Image with Keypoints");
cv::imshow("Image with Keypoints", image_with_keypoints);
cv::waitKey(0);
return 0;
}
参考文章
win10+cuda安装+cudnn
win10+vs2017+opencv4.5.0+opencv_contrib-4.5.0+cuda源码编译
Win10+VS2017+Opencv4配置contrib扩展