【100分求助】openCv 霍夫找直线时出错

zyrr159487 2015-09-24 11:27:08
加精
函数如下

void CtestOpencvDlg::OnTest()
{
//【1】载入原始图和Mat变量定义
Mat srcImage = imread("C:\\test2.jpg"); //工程目录下应该有一张名为1.jpg的素材图
Mat temp, midImage,dstImage;//临时变量和目标图的定义

//【2】进行边缘检测和转化为灰度图
cvtColor(srcImage, temp, CV_BGR2GRAY);//转化边缘检测后的图为灰度图
Canny(temp, midImage, 50, 200, 3);//进行一此canny边缘检测
cvtColor(midImage,dstImage, CV_GRAY2BGR);//转化边缘检测后的图为灰度图

//【3】进行霍夫线变换
vector<Vec4i> lines;//定义一个矢量结构lines用于存放得到的线段矢量集合
HoughLinesP(midImage, lines, 1, CV_PI/180, 80, 50, 10 );

//【4】依次在图中绘制出每条线段
for( size_t i = 0; i < lines.size(); i++ )
{
Vec4i l = lines[i];
line( srcImage, Point(l[0], l[1]), Point(l[2], l[3]), Scalar(186,88,255), 1, CV_AA);
}

//【5】显示效果图
imshow("【效果图】", srcImage);

waitKey(0);
}


出错的位置是在waitKey(0); 后,显示了效果图,关闭效果图后,就会出现错误提示如下



载入的图片原图如下
...全文
2556 37 打赏 收藏 转发到动态 举报
写回复
用AI写文章
37 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq_36100979 2017-04-09
  • 打赏
  • 举报
回复
参考27楼,解决了一天的困扰,谢谢啦!
zhaoshuang123111 2017-04-09
  • 打赏
  • 举报
回复
楼主的问题解决了吗?我的是OPENCV3.0+VS2015,遇到了相同的问题 ,没有解决 楼主分享一下吧!
  • 打赏
  • 举报
回复
27楼正确,注意opencv_world310.lib 和opencv_world310d.lib同时引用也不行
木石清唱 2016-10-16
  • 打赏
  • 举报
回复
参考28/29楼解决
a_freshbird 2016-09-23
  • 打赏
  • 举报
回复
27楼是对的,我也是参考27楼解决的,之前一直用的是*lib,现在改成opecv_world310d.lib就行了
fanhui1022 2016-07-19
  • 打赏
  • 举报
回复
参考27楼解决
qq_26547367 2016-07-19
  • 打赏
  • 举报
回复
楼主问题解决没有啊?可以分享一下吗?
qq_26547367 2016-07-19
  • 打赏
  • 举报
回复
楼上的方法好像不行啊,我opencv3.0的也遇到这样问题,求大神解答
  • 打赏
  • 举报
回复
点错了;补发一下: VS2010 对应 opencv\build\x86\vc10 VS2012对应opencv\build\x86\vc11 VS2013对应opencv\build\x86\vc12 如果要把编译成64位,把目录中的x86攺为x64既可; 另外还有一个解决办法;不要使用动态库,攺用opencv\build\x86\vc1?\staticlib中的lib进行链接。这个方法能保证解决问题;
  • 打赏
  • 举报
回复
引用 10 楼 zhao4zhong1 的回复:
崩溃的时候在弹出的对话框按相应按钮进入调试,按Alt+7键查看Call Stack即“调用堆栈”里面从上到下列出的对应从里层到外层的函数调用历史。双击某一行可将光标定位到此次调用的源代码或汇编指令处,看不懂时双击下一行,直到能看懂为止。


赵老师热心值得表扬,但回复质量有待提高呀,很多帖子的回复看起来都没能帮上楼主的忙,反而有误导作用;
这个问题真正的原因是在exe中试图释放dll模块中的内存导致的。

_free_dbg_nolock函数里的ASSERT前有一段注释说明了这个问题;
/*
* If this ASSERT fails, a bad pointer has been passed in. It may be
* totally bogus, or it may have been allocated from another heap.
* The pointer MUST come from the 'local' heap.
*/
_ASSERTE(_CrtIsValidHeapPointer(pUserData));


解决办法是把保证DLL和EXE的运行库一至;都为MD或MDd或者其它两种;
还有一种可能也会导致此问题,你编译使用的VS版本和OpenCV里配置的版本不对;
以下是VS版本对应的OpenCV包含目录和链接目录;
jipin37 2016-02-28
  • 打赏
  • 举报
回复
遇到类似问题 vs2015 opencv3.1 x64 修改方法opencv_world310.lib 改为opencv_world310d.lib
blueink_200451 2015-10-15
  • 打赏
  • 举报
回复
引用 10 楼 zhao4zhong1 的回复:
崩溃的时候在弹出的对话框按相应按钮进入调试,按Alt+7键查看Call Stack即“调用堆栈”里面从上到下列出的对应从里层到外层的函数调用历史。双击某一行可将光标定位到此次调用的源代码或汇编指令处,看不懂时双击下一行,直到能看懂为止。
正解。
_寿大寿 2015-10-14
  • 打赏
  • 举报
回复
爱莫能助啊啊
开发之路 2015-10-13
  • 打赏
  • 举报
回复
我运行了你的代码,是好的,可能是你OpenCV库引用的问题
天台的故事 2015-10-05
  • 打赏
  • 举报
回复
除了不是堆的指针? 检查vector<Vec4i>的用法,关键是释构函数是做了什么
羽毛小子 2015-09-29
  • 打赏
  • 举报
回复
看看不懂
b671009 2015-09-28
  • 打赏
  • 举报
回复
顶了,看看如何。
cattpon 2015-09-27
  • 打赏
  • 举报
回复
主要是想解决什么问题?
nettman 2015-09-27
  • 打赏
  • 举报
回复
学习下
shiter 2015-09-27
  • 打赏
  • 举报
回复
是不是哪个api用错了,要传三通道你穿的单个通道,或者传的是反的
加载更多回复(13)

19,468

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 图形处理/算法
社区管理员
  • 图形处理/算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧