简单的学习了一段时间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; }
(原图)

