一、环境配置

  •  ① 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

 

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐