opencv3+vs2015霍夫变换中断

sinat_33655730 2016-01-06 10:12:02
工程目录里有1.jpg, 运行边缘检测和灰度化都没有问题,霍夫变换不知道哪里出了问题,编译会被中断。



#include <opencv2/highgui/highgui.hpp>
#include <opencv2/core/core.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <opencv2\opencv.hpp>
#include <vector>

using namespace cv;
using namespace std;

int main()
{

Mat srcImage = imread("1.jpg");
Mat midImage, dstImage;


Canny(srcImage, midImage, 50, 200, 3);
cvtColor(midImage, dstImage, CV_GRAY2BGR);


vector<Vec2f> lines;
HoughLines(midImage, lines, 1, CV_PI / 180, 150, 0, 0);


for (size_t i = 0; i < lines.size(); i++)
{
float rho = lines[i][0], theta = lines[i][1];
Point pt1, pt2;
double a = cos(theta), b = sin(theta);
double x0 = a*rho, y0 = b*rho;
pt1.x = cvRound(x0 + 1000 * (-b));
pt1.y = cvRound(y0 + 1000 * (a));
pt2.x = cvRound(x0 - 1000 * (-b));
pt2.y = cvRound(y0 - 1000 * (a));
line(dstImage, pt1, pt2, Scalar(55, 100, 195), 1, CV_AA);
}


imshow("【原始图】", srcImage);


imshow("【边缘检测后的图】", midImage);


imshow("【效果图】", dstImage);

waitKey(0);

return 0;
}
...全文
736 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
开源学开源 2018-01-29
  • 打赏
  • 举报
回复

#include<opencv2/opencv.hpp>
#include<iostream>
#define CV_PI 3.1415926535897932384626433832795
using namespace cv;
//hough line
int main()
{
Mat srcImage = imread("C:\\Users\\zhouchong\\Desktop\\1.jpg");
if (srcImage.empty())
{
std::cout << "load wrong";
return 0;
}
Mat midImage, dstImage;

Canny(srcImage, midImage, 50, 200, 3);
cvtColor(midImage, dstImage, CV_GRAY2BGR);

std::vector<Vec2f>lines;
HoughLines(midImage, lines, 1, CV_PI / 180, 150, 0, 0);

for (size_t i = 0; i < lines.size(); i++)
{
/*cout << lines[i][0] << endl << lines[i][1] << endl;
Vec2f tem = lines.at(i);
float rho0 = tem[0];

float theta = tem[1];*/
Point pt1, pt2;
double a = cos(lines[i][0]), b = sin(lines[i][1]);
double x0 = a * lines[i][0], y0 = b * lines[i][0];
pt1.x = cvRound(x0 + 1000 * (-b));
pt1.y = cvRound(y0 + 1000 * a);
pt2.x = cvRound(x0 - 1000 * (-b));
pt2.y = cvRound(y0 - 1000 * a);

line(dstImage, pt1, pt2, Scalar(55, 100, 195), 1, LINE_AA);
}

imshow("source pic", srcImage);
imshow("canny result", midImage);
imshow("result pic", dstImage);

waitKey(0);
return 0;
}

这样就可以出来了,调试你的程序的时候发现是那个lines[i][0]传递出了问题,调试过程在我注释的部分,更改部分为直接访问lines[i][0],lines[i][1]
在vs15+cv3.3 debug 调试结果如下
开源学开源 2018-01-29
  • 打赏
  • 举报
回复

#include<opencv2/opencv.hpp>
#include<iostream>
using namespace cv;
//hough line
int main()
{
Mat srcImage = imread("1.jpg");
if (srcImage.empty())
{
std::cout << "load wrong";
return 0;
}
Mat midImage, dstImage;

Canny(srcImage, midImage, 50, 200, 3);
cvtColor(midImage, dstImage, CV_GRAY2BGR);

std::vector<Vec2f>lines;
HoughLines(midImage, lines, 1, CV_PI / 180, 150, 0, 0);

for (size_t i = 0; i < lines.size(); i++)
{
float rho = lines[i][0], theta = lines[i][1];
Point pt1, pt2;
double a = cos(theta), b = sin(theta);
double x0 = a * rho, y0 = b * rho;
pt1.x = cvRound(x0 + 1000 * (-b));
pt1.y = cvRound(y0 + 1000 * a);
pt2.x = cvRound(x0 - 1000 * (-b));
pt2.y = cvRound(y0 - 1000 * a);

line(dstImage, pt1, pt2, Scalar(55, 100, 195), 1, LINE_AA);
}

imshow("source pic", srcImage);
imshow("canny result", midImage);
imshow("result pic", dstImage);

waitKey(0);
return 0;
}

在opencv3.0下可以正常运行,在opencv3.3下,release版本能运行,
我3.0配的是vs2013,32位;3.3搭配的是vs15,64位
AllenRicard 2018-01-27
  • 打赏
  • 举报
回复
楼主后来把这个问题解决了吗?我也遇到了,毫无头绪
赵4老师 2016-01-07
  • 打赏
  • 举报
回复
崩溃的时候在弹出的对话框按相应按钮进入调试,按Alt+7键查看Call Stack即“调用堆栈”里面从上到下列出的对应从里层到外层的函数调用历史。双击某一行可将光标定位到此次调用的源代码或汇编指令处,看不懂时双击下一行,直到能看懂为止。
linzertling 2016-01-07
  • 打赏
  • 举报
回复
既然边缘检测没问题那就说明图像载入没问题,你先自己检查一下hough变换函数的输入参数有没有问题,要确保内存没有溢出,之后设断点看一下有什么别的问题没

24,854

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 工具平台和程序库
社区管理员
  • 工具平台和程序库社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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