gpt4 book ai didi

algorithm - 追踪图片中的像素

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:51:34 25 4
gpt4 key购买 nike

我有一张这样的路的照片

enter image description here

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

我不想使用 findContour 函数,因为我会得到很多错误的数据,而且遍历所有可能性来找出正确的数据并不节省时间。

我希望算法速度快,所以只需跟随底部的起点,然后向上并跟随同一张图片中的线。

现在我的问题是是否有任何 openCV 功能可用于跟踪像素或可能是一条小虚线以跟随该线?

你有什么建议?提前致谢

最佳答案

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

#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);
}

如果以下轮廓不够,请尝试调整公差值或省略 FLOODFILL_FIXED_RANGE

contour

关于algorithm - 追踪图片中的像素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18853103/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com