OpenCV3的配置中有一步是附加依赖项的配置:
链接器(Linker)->输入(Input)->附加依赖项(Additional Dependencies)
我们往往会将D:\OpenCV3.4.7\opencv\build\x64\vc15\lib中所有lib文件添加进去
opencv_aruco347.lib
opencv_aruco347d.lib
opencv_bgsegm347.lib
opencv_bgsegm347d.lib
opencv_bioinspired347.lib
opencv_bioinspired347d.lib
opencv_calib3d347.lib
opencv_calib3d347d.lib
opencv_ccalib347.lib
opencv_ccalib347d.lib
opencv_core347.lib
opencv_core347d.lib
opencv_datasets347.lib
opencv_datasets347d.lib
opencv_dnn347.lib
opencv_dnn347d.lib
opencv_dnn_objdetect347.lib
opencv_dnn_objdetect347d.lib
opencv_dpm347.lib
opencv_dpm347d.lib
opencv_face347.lib
opencv_face347d.lib
opencv_features2d347.lib
opencv_features2d347d.lib
opencv_flann347.lib
opencv_flann347d.lib
opencv_fuzzy347.lib
opencv_fuzzy347d.lib
opencv_hfs347.lib
opencv_hfs347d.lib
opencv_highgui347.lib
opencv_highgui347d.lib
opencv_imgcodecs347.lib
opencv_imgcodecs347d.lib
opencv_imgproc347.lib
opencv_imgproc347d.lib
opencv_img_hash347.lib
opencv_img_hash347d.lib
opencv_line_descriptor347.lib
opencv_line_descriptor347d.lib
opencv_ml347.lib
opencv_ml347d.lib
opencv_objdetect347.lib
opencv_objdetect347d.lib
opencv_optflow347.lib
opencv_optflow347d.lib
opencv_phase_unwrapping347.lib
opencv_phase_unwrapping347d.lib
opencv_photo347.lib
opencv_photo347d.lib
opencv_plot347.lib
opencv_plot347d.lib
opencv_reg347.lib
opencv_reg347d.lib
opencv_rgbd347.lib
opencv_rgbd347d.lib
opencv_saliency347.lib
opencv_saliency347d.lib
opencv_shape347.lib
opencv_shape347d.lib
opencv_stereo347.lib
opencv_stereo347d.lib
opencv_stitching347.lib
opencv_stitching347d.lib
opencv_structured_light347.lib
opencv_structured_light347d.lib
opencv_superres347.lib
opencv_superres347d.lib
opencv_surface_matching347.lib
opencv_surface_matching347d.lib
opencv_text347.lib
opencv_text347d.lib
opencv_tracking347.lib
opencv_tracking347d.lib
opencv_video347.lib
opencv_video347d.lib
opencv_videoio347.lib
opencv_videoio347d.lib
opencv_videostab347.lib
opencv_videostab347d.lib
opencv_xfeatures2d347.lib
opencv_xfeatures2d347d.lib
opencv_ximgproc347.lib
opencv_ximgproc347d.lib
opencv_xobjdetect347.lib
opencv_xobjdetect347d.lib
opencv_xphoto347.lib
opencv_xphoto347d.lib
这种做法对于通过从官网下载来的OpenCV二进制可执行文件安装的OpenCV似乎没有什么影响
但对于自己通过源码编译配置的就出现了问题
第一个问题:opencv窗口闪退
对于如下代码,其执行结果imshow窗口闪退
#include "pch.h"
#include <iostream>
#include <opencv2/opencv.hpp>
using namespace cv;
int main()
{
Mat srcImg = imread("G:\\gatepic.jpg");
imshow("imshow", srcImg);
waitKey(0);
return 0;
}
查找过程中找到了一篇问答《VS2010配置opencv2.2.0,运行时总是闪退》(https://ask.csdn.net/questions/246151)
其中回答【在debug里面,链接器->输入->附加依赖项里面添加,opencv_world341d.lib,注意,有一个d在里面,而release里面是没有D的,这两个不能混用,否则会闪退】
如果说这个影响相对较小
那么第二种情况就直接让程序崩溃无法运行了
第二个问题:SURF程序不启动,调试报错
代码如下:
int hessianThreshold = 400;
Ptr<xfeatures2d::SURF> detector = xfeatures2d::SURF::create(hessianThreshold);
std::vector<KeyPoint> keypoints;
detector->detect(srcImg, keypoints); // 此处崩溃
Mat featuredImg;
drawKeypoints(srcImg, keypoints, featuredImg, Scalar::all(-1), DrawMatchesFlags::DEFAULT);
代码在 detector->detect(srcImg, keypoints); 处崩溃
在Debug模式下直接”无调试运行“结果是没有任何相应
在Debug模式下针对 detector->detect(srcImg, keypoints); ”调试“,结果是如下报错(每次都会不同):
各种奇怪的崩溃,debug模式下调试报错"Unhandled exception (opencv_core310.dll)"、"(xxx.dll)in xx.exe Access violation reading location"、" Access violation writinglocation"等类似错误
查阅资料,终于找到了根本原因,参考《Face Recognition in Videos with OpenCV3 gives Unhandled exception (opencv_core310.dll)》(https://stackoverflow.com/questions/41302737/face-recognition-in-videos-with-opencv3-gives-unhandled-exception-opencv-core31)
更改附加依赖项
将该项目中的依赖换成只有-d的之后果然一切都好了
opencv_aruco347d.lib
opencv_bgsegm347d.lib
opencv_bioinspired347d.lib
opencv_calib3d347d.lib
opencv_ccalib347d.lib
opencv_core347d.lib
opencv_datasets347d.lib
opencv_dnn347d.lib
opencv_dnn_objdetect347d.lib
opencv_dpm347d.lib
opencv_face347d.lib
opencv_features2d347d.lib
opencv_flann347d.lib
opencv_fuzzy347d.lib
opencv_hfs347d.lib
opencv_highgui347d.lib
opencv_imgcodecs347d.lib
opencv_imgproc347d.lib
opencv_img_hash347d.lib
opencv_line_descriptor347d.lib
opencv_ml347d.lib
opencv_objdetect347d.lib
opencv_optflow347d.lib
opencv_phase_unwrapping347d.lib
opencv_photo347d.lib
opencv_plot347d.lib
opencv_reg347d.lib
opencv_rgbd347d.lib
opencv_saliency347d.lib
opencv_shape347d.lib
opencv_stereo347d.lib
opencv_stitching347d.lib
opencv_structured_light347d.lib
opencv_superres347d.lib
opencv_surface_matching347d.lib
opencv_text347d.lib
opencv_tracking347d.lib
opencv_video347d.lib
opencv_videoio347d.lib
opencv_videostab347d.lib
opencv_xfeatures2d347d.lib
opencv_ximgproc347d.lib
opencv_xobjdetect347d.lib
opencv_xphoto347d.lib
imshow窗口得到了保持:
SURF特征检测程序,成功实现了特征检测: