笔记——关于opencv 中 detectMultiScale 和 CascadeClassifier 遇到的各种问题(很重点)

你可能不知道,一个刚开始学opencv 人脸识别的人,有多痛苦,一开始只下了,opencv没有下opencv_contrib。
好,下了之后,又遇到一个问题,直接移库,肯定会有其它情况出现,太麻烦。于是查了opencv和opencv_contrib一起编译的方法。

到这里还不至于头晕,只是在此期间,要把几个文件夹换下位置而已。这个百度还是可以找到答案的。

然后我拿着从网上找到的代码

cmake .
make

以为能成功跑通,结果呢,我日。我的噩梦从这里开始,绝了。

在这里插入图片描述
看到这里我去百度了一下,就是CSDN ,绝了,全都没说到要点,然后我就自己试试在前面加

cv::

结果呢?不行。我便点这个类型去看看它的头文件。一看哦哦哦。

objdetect.hpp

于是我便在上面

在这里插入图片描述
以为这就行了。
运行,新的噩梦来了。
在这里插入图片描述
这就绝了,100%还错。
于是我又来百度,又找到了方法,又是乱七八糟,又是没用。不过有个重要的信息,缺少库,引起了我的注意,于是乎我便去寻找,库的位置,百度不断查。

在这位大佬的文章中找到了答案:https://blog.csdn.net/NaYinZuo/article/details/108365087

于是乎,我在Cmakelist里面改成这样。
在这里插入图片描述

target_link_libraries(main -I/usr/include/opencv4 -lopencv_stitching -lopencv_alphamat -lopencv_aruco -lopencv_barcode -lopencv_bgsegm -lopencv_bioinspired -lopencv_ccalib -lopencv_dnn_objdetect -lopencv_dnn_superres -lopencv_dpm -lopencv_face -lopencv_freetype -lopencv_fuzzy -lopencv_hdf -lopencv_hfs -lopencv_img_hash -lopencv_intensity_transform -lopencv_line_descriptor -lopencv_mcc -lopencv_quality -lopencv_rapid -lopencv_reg -lopencv_rgbd -lopencv_saliency -lopencv_shape -lopencv_stereo -lopencv_structured_light -lopencv_phase_unwrapping -lopencv_superres -lopencv_optflow -lopencv_surface_matching -lopencv_tracking -lopencv_highgui -lopencv_datasets -lopencv_text -lopencv_plot -lopencv_ml -lopencv_videostab -lopencv_videoio -lopencv_viz -lopencv_wechat_qrcode -lopencv_ximgproc -lopencv_video -lopencv_xobjdetect -lopencv_objdetect -lopencv_calib3d -lopencv_imgcodecs -lopencv_features2d -lopencv_dnn -lopencv_flann -lopencv_xphoto -lopencv_photo -lopencv_imgproc -lopencv_core)

新的噩梦即将出现。
在这里插入图片描述
现在正常了,生成了。
你以为ok了吗?
no,no,no
在这里插入图片描述
噩梦终极版出现了,我日,就是这个搞了我半天(真半天)。
我去百度,这溢出栈,我寻思我也没数组之类啊。然后就开始printf (cout)断点法。

在这里插入图片描述
找到了resize这里出现了问题。
我在想这个我前天才刚用,怎么会有问题呢?
回溯想法,想到了,刚刚的Cmakelist
瞬间明白。

target_link_libraries(main ${OpenCV_LIBS} -lopencv_objdetect)

尝试性的改成这个之后,保存了,居然没问题(没看语法)

在这里插入图片描述
然后它它它它它又来了,我日。
最后找到是

detectMultiScale

的问题

我日。
这个百度也找不到,找到也是其它的问题,与我无关。
于是乎。

我开始了摆烂。

没有了没有了,只是在复盘,最后想到了,会不会是库的问题,看了一下,果然导入的库没有opencv_objdetect
有个头文件也没有用啊。

然后就在cmakelist 里面不断尝试,顺藤摸瓜到了

OpenCVConfig.cmake

这个文件,发现一个都看不懂,但我就知道它有问题。
于是拿它去百度。
终于啊
这个大佬,这个大佬,这里:https://blog.csdn.net/zhouhuaidong/article/details/100009690
救了我啊。虽然也没那么夸张。
具体就是

locate OpenCVConfig.cmake

然后

set(OpenCV_DIR /home/canfly/Downloads/opencv-3.1.0/build/) 就添加这一行就ok了
//设置OpenCVConfig.cmake的地址
find_package(OpenCV REQUIRED)
//在设置的地址下,查找opencv
include_directories(${OPENCV_INCLUDE_DIRS})
//添加引用目录

在这里插入图片描述
于是找到了这四个小屁孩。

我在试了前两个之后,发现不行,彻底摆烂了。

一直鬼哭狼嚎,最后试了倒数第二个,妈的。

成功了。

我真不知道我那里搞错了,一个初学者,要经历这么长远的路,我……

这也让我认识到,在CSDN或百度中挖宝有多难,所以我才决定自己写。

完整的CmakeList文件,那个.cmake文件的地址记得按照自己的改。

cmake_minimum_required(VERSION 3.5)

# 项目名称
PROJECT(main)

# 二进制文件
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY)

set(OpenCV_DIR /usr/lib/x86_64-linux-gnu/cmake/opencv4) #设置OpenCVConfig.cmake的地址

# 引入 OpenCV 包
find_package(OpenCV REQUIRED)

# 头文件
include_directories(${OpenCV_INCLUDE_DIRS})


message(STATUS "OpenCV library status:\n")
message(STATUS "    config: ${OpenCV_DIR}\n")
message(STATUS "    version: ${OpenCV_VERSION}\n")
message(STATUS "    libraries: ${OpenCV_LIBS}\n")
message(STATUS "    include path: ${OpenCV_INCLUDE_DIRS}\n")

# 可执行文件和源文件
add_executable(main main.cpp)

# 库文件
link_directories(${OpenCV_LIBRARY_DIRS})
target_link_libraries(main ${OpenCV_LIBS} )

最后ok就行了。
在这里插入图片描述
over!!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值