【发布时间】:2020-06-30 06:01:34
【问题描述】:
我只是 C++ 的初学者,我需要在现有的四个标记上绘制对象,每个标记之间有一个延迟,我尝试使用 Chrono_sleep_until,但它导致我的程序滞后,甚至对象是在第二个标记上立即出现和消失,我知道有问题但无法猜测可能是什么,有什么帮助吗?
std::vector<int> ids;
std::vector<std::vector<cv::Point2f> > corners;
cv::aruco::detectMarkers(image, marker_dict, corners, ids);
// Draw markers using opencv tool
cv::aruco::drawDetectedMarkers(mid, corners, ids);
// Draw markers custom
for (size_t i = 0; i < corners.size(); ++i)
{
// Convert to integer ponits
int num = static_cast<int>(corners[i].size());
std::vector<cv::Point> points;
for (size_t j = 0; j < corners[i].size(); ++j)
points.push_back(cv::Point(static_cast<int>(corners[i][j].x), static_cast<int>(corners[i][j].y)));
const cv::Point* pts = &(points[0]);
// Draw
if (ids.at(i) == 32) {
cv::fillPoly(right, &pts, &num, 1, cv::Scalar(255, 0, 0));
}
std::chrono::system_clock::time_point timePoint = std::chrono::system_clock::now() + std::chrono::seconds(2);
std::this_thread::sleep_until(timePoint);
if (ids.at(i) == 45) {
cv::fillPoly(right, &pts, &num, 1, cv::Scalar(255, 0, 0));
break;
}
【问题讨论】:
-
sleep_until仅当您在循环之前定义结束时间并在循环内增加它时才能准确工作 - 否则时间会漂移。这是你需要的吗? stackoverflow.com/questions/39987806/accurate-sampling-in-c/… -
@Galik 我这样做了,没有滞后了,但是 id 为 45 的第二个标记不等待定义的时间,并出现,消失反复闪烁。
标签: c++ delay sleep chrono aruco