Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 跟踪图片中的像素_Algorithm_Opencv_Image Processing - Fatal编程技术网

Algorithm 跟踪图片中的像素

Algorithm 跟踪图片中的像素,algorithm,opencv,image-processing,Algorithm,Opencv,Image Processing,我有一张这样一条路的照片 现在我只想看图片的底部,沿着左边的白色车道标记,直到我覆盖了整个形状 我不想使用findContour函数,因为我会得到很多糟糕的数据,而且要想找出正确的数据并不是很省时 我希望算法是快速的,所以只需遵循底部的起始点,然后沿着同一张图片中的线条向上走 现在我的问题是,是否有任何openCV功能可用于跟踪像素,或者可能有一个小虚线来跟踪该线 你有什么建议? 提前感谢如果您知道一个种子点,可以通过泛光填充轻松快速地进行分割(在我当前的机器上大约为0.001s): #inc

我有一张这样一条路的照片

现在我只想看图片的底部,沿着左边的白色车道标记,直到我覆盖了整个形状

我不想使用findContour函数,因为我会得到很多糟糕的数据,而且要想找出正确的数据并不是很省时

我希望算法是快速的,所以只需遵循底部的起始点,然后沿着同一张图片中的线条向上走

现在我的问题是,是否有任何openCV功能可用于跟踪像素,或者可能有一个小虚线来跟踪该线

你有什么建议?
提前感谢

如果您知道一个种子点,可以通过
泛光填充
轻松快速地进行分割(在我当前的机器上大约为0.001s):

#include <opencv2/opencv.hpp>

#include <boost/chrono/include.hpp>

#include <iostream>
#include <ctime>

std::vector<std::vector<cv::Point>> segment_lane(const cv::Mat& img, const cv::Point& seed, int tol)
{
    cv::Mat mask = cv::Mat::zeros(img.rows + 2, img.cols + 2, CV_8UC1);
    cv::floodFill(img, mask, seed, 255, 0, cv::Scalar(tol, tol, tol), cv::Scalar(tol, tol, tol), 4 + (255 << 8) + cv::FLOODFILL_MASK_ONLY + cv::FLOODFILL_FIXED_RANGE);
    std::vector<std::vector<cv::Point>> contours;
    cv::findContours(mask, contours, CV_RETR_EXTERNAL, CV_CHAIN_APPROX_SIMPLE, cv::Point(-1, -1));
    return contours;
}

int main()
{
    cv::Mat img = cv::imread("Ph2PK.png");

    auto start = boost::chrono::system_clock::now();
    auto contours = segment_lane(img, cv::Point(21, 461), 40);
    auto end = boost::chrono::system_clock::now();

    boost::chrono::duration<double> elapsed_seconds = end - start;
    std::cout << "elapsed time: " << elapsed_seconds.count() << "s\n";

    cv::drawContours(img, contours, 0, cv::Scalar(255, 0, 0), 2);
    cv::imshow("img", img);
    cv::imwrite(out.png", img);
    cv::waitKey(0);
}
#包括
#包括
#包括
#包括
标准:矢量段(常数cv::Mat和img,常数cv::点和种子,int tol)
{
cv::Mat mask=cv::Mat::zero(img.rows+2,img.cols+2,cv_8UC1);

cv::泛光填充(img、掩码、种子、255、0、cv::标量(tol、tol、tol)、cv::标量(tol、tol、tol)、4+(255)这让我想起了斯坦福大学在机器学习方面的工作。你是说算法必须是快速的。这只是理论上的大O兴趣,还是你必须在毫秒的特定时间内从像你的例子这样的图像中获取数据?在这种情况下,编程语言可能是有趣的。当然还有输出格式。你认为呢你需要?一个属于左车道的所有像素的列表?或者轮廓?或者骨架?你可以用精明的findContours显示你的解决方案,这些findContours可以产生正确的结果,但速度太慢。然后我们可以尝试优化它。我正在用Erlang编写程序,并使用NIF功能运行openCV函数,因此你可以假设它是C++.我希望在Odroid X2上以不到30毫秒的时间完成计算,Odroid X2具有2G ram和quadcore 1.3 CPU,并且是arm基础。需要重新计算轮廓的计算,以理解数据,并通过所有点,曲线中的houghline我们得到了很多线,最好的情况是鸟瞰图,即also不能有效地鸟瞰整个画面。感谢您的兴趣和评论。感谢您的澄清。我仍然没有得到您想要的车道数据。1)所有车道像素,2)轮廓像素,3)车道中心的所有像素,4)定义车道骨架的坐标?选择3是赢家:D再次感谢,伙计