关于Opencv3在使用霍夫变换(houghlines)时一直出问题的解决

来源:互联网 发布:售后软件app 编辑:程序博客网 时间:2024/05/22 15:49


       简单的学习了一段时间Opencv3.0,最近在做霍夫变换时经常出现问题,问题如下: 






     自己也百度、谷歌了很长时间,发现说的都不是很好,也不能解决问题。最后自己一点点调试,一点点验证最后成功的解决了问题。

一、首先我的运行平台是win10+opencv3+vs2015+64位 
之前在进行程序调试,在链接器的输入附加依赖项一直输入opencv_ts300.lib和opencv_world300.lib, 

不论是在Dubeg模式还是在 Release模式下,程序都可以经行调试, 但在做霍夫变换时一直出问题,而且就是使用官方的源代码也是出现问题。 

后来想起了看过的文章中说过opencv_ts300.lib和opencv_world300.lib是针对Release模式的,而opencv_ts300d.lib和opencv_world300d.lib是针对debug模式的。

二、解决的方法

 1、把Debug改成Release程序就不在出错了。

  2、但是还想再Debug模式下运行程序,就只能用opencv_ts300d.lib和opencv_world300d.lib了。但是会说缺少msvcr120d.dll和msvcp120d.dll只要下载文件添加到C:\Windows\Systems32里面就可以。


msvcr120d.dll下载地址:https://cn.dll-files.com/msvcr120d.dll.html

msvcp120d.dll下载地址:https://cn.dll-files.com/msvcp120d.dll.html


#include "opencv2/highgui/highgui.hpp"
#include "opencv2/imgproc/imgproc.hpp"
#include <iostream>

using namespace cv;
using namespace std;

int main(void)
{
Mat src = imread("1.jpg", 0);
if (src.empty())
{
return -1;
}
Mat dst, cdst;
Canny(src, dst, 50, 200, 3);
cvtColor(dst, cdst, COLOR_GRAY2BGR);

vector<Vec2f> lines;
HoughLines(dst, lines, 1, CV_PI / 180, 200, 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(cdst, pt1, pt2, Scalar(0, 0, 255), 3, CV_AA);
}

        imshow("source", src);
imshow("detected lines", cdst);
waitKey();
return 0;
}










1 0