我已经编写了用于车道检测的代码,使用霍夫线变换,在我的电脑中存储的视频文件中识别出线条[有1280 * 720分辨率],我的视频运行缓慢,我怎样才能让运行速度更快? ,在我的代码中,我检查了函数hough_transform的执行时间,包括canny,cvtcolor和hough变换,我正在检索帧,我能够每秒执行两帧,请帮我减少执行time.thanks提前 这是代码:
#include <opencv2/highgui/highgui.hpp>
#include "opencv2/imgproc/imgproc.hpp"
#include <iostream>
using namespace cv;
using namespace std;
int hough_tranform(Mat src){
if(src.empty())
{
cout << "can not open " << endl;
return -1;
}
Mat dst, cdst;
Canny(src, dst, 50, 200, 3);
cvtColor(dst, cdst, COLOR_GRAY2BGR);
vector<Vec4i> lines;
HoughLinesP(dst, lines, 1, CV_PI/180, 50, 50, 10 );
for( size_t i = 0; i < lines.size(); i++ )
{
Vec4i l = lines[i];
line( cdst, Point(l[0], l[1]), Point(l[2], l[3]), Scalar(0,0,255), 3, 0);
}
imshow("detected lines", cdst);
}
int main() {
Mat frame;
string path = "C:/santhu/Wildlife.wmv";
VideoCapture capture(path);
namedWindow("my_window");
for(;;) {
capture >> frame;
hough_tranform(frame);
imshow("my_window", frame);
if(cv::waitKey(30) >= 0) break;
}
}
答案 0 :(得分:0)
在进行边缘检测之前,您应该缩小图像尺寸,然后进行霍夫线变换。然后,您可以将结果升级回原始大小。
答案 1 :(得分:0)
使用HoughLinesP函数的参数将帮助您提高精度成本。当图像尺寸增加时,此功能的性能将大幅降低。
如果可能的话,使用HoughLines而不是概率方法,因为它更快。
使用双线性插值缩小图像不会影响输出质量,因为在canny边缘检测器输出上执行了hough变换。
我将遵循的步骤是:
当你正在进行车道检测算法时,我将把我的两美分放进去。单独的Canny检测对包含树木阴影的道路没有多大帮助,因为周围会检测到边缘。虽然Probabilisitic Hough方法在上述情况下减少了误差,但(a)限制theta值,(b)使用sobel边缘检测,其中dx优先于dy,是一些值得尝试的实验。