一、环境配置
- ① opencv源码编译,获得build/bin/Debug和build/lib
- bin/Debug中有:opencv_world470d.dll和pdb
- build/lib中有:opencv_world470d.pdb
- 但这两个pdb文件大小不一样,内容不一样。
- ② 自己的工程配置如下:主要是Include包含目录;可执行文件目录bin;lib目录
- 这里的lib目录不是为了装入opencv_world470d.dll,而是导入pdb
- 运行时缺opencv_world470d.dll,将bin/Debug下的opencv_world470d.dll复制到exe目录下
- 主要是需要保证opencv_world470d.dll和opencv_world470d.pdb是一起编译产生的
- 如果随便复制一个opencv_world470d.dll别的地方编译的,二者不一致就会无法进入源码。
- pdb中有源码的路径,必须要保证一致!
- ③ 如果不确定opencv_world470d.dll和opencv_world470d.pdb是一起编译产生的。可以将build/bin和build/lib全部删除,然后重新编译,重新编译需要半小时左右。然后再进行①和②的配置,这样比较保险。
#include <opencv2/imgproc.hpp>
#include <vector>
int main(int argc, char* argv[])
{
int m_iWidth = 29440, m_iHeight = 512;
cv::Mat m_mask = cv::Mat::zeros(cv::Size(m_iWidth, m_iHeight), CV_8UC1);
std::vector<std::vector<cv::Point>> vecZoneDatas;
std::vector<std::vector<cv::Point>> m_RoiContours;
std::vector<cv::Point> tmp;
tmp.push_back(cv::Point(1,1));
tmp.push_back(cv::Point(100, 1));
tmp.push_back(cv::Point(100, 100));
tmp.push_back(cv::Point(1, 200));
m_RoiContours.push_back(tmp);
for (auto var : m_RoiContours)
{
vecZoneDatas.push_back(var);
}
cv::drawContours(m_mask, vecZoneDatas, -1, cv::Scalar::all(255), -1);
return 0;
}
stackoverflow 怎么debug opencv 源码
- 下载了PdbInspector:https://github.com/Supranaturaler/PdbInspector
- 打开sln,编译;发现找不到dia2.h
- 使用everything搜索,找到,然后把源码中的包含路径改为绝对路径。编译成功,得到exe
- 打开PdbInspector的exe,load加载opencv_world470d.pdb