OpenCV3中附加依赖项(lib)文件错误使用的后果

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特征检测程序,成功实现了特征检测:

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值