gpt4 book ai didi

c++ - 获取 .tiff map 中的最短路径

转载 作者:行者123 更新时间:2023-11-30 05:21:46 26 4
gpt4 key购买 nike

我正在使用 SLAM 构建环境。我用激光雷达传感器来做这件事,它工作得非常好。现在我有了一张 .tiff 格式的环境 map 。我想找到从 A 点到 B 点的最短路径 (Dijkstra),但我的问题是我不知道如何将此 .tiff map 转换为我可以使用的格式。我用 C++ 编写代码。

有人知道我该怎么做吗?

谢谢:)

编辑:

map看起来像这样。黑色像素是障碍物,灰色像素是移动空间。

最佳答案

我建议您使用CImg - link here .它是 C++ 语言,非常轻巧且易于使用,因为它被实现为“仅 header ” - 因此您只需下载并包含单个文件 CImg.h 即可去。

此代码将读取您的 TIF map 并允许您访问像素:

#include <iostream>
#include "CImg.h"
using namespace std;
using namespace cimg_library;

int main(int argc, char** const argv)
{
// Load the map
CImg<unsigned char> map("map.tif");

// Get and print its dimensions
int w = map.width();
int h = map.height();
cout << "Dimensions: " << w << "x" << h << endl;

// Iterate over all pixels displaying their RGB values
for (int r = 0; r < h; r++){
for (int c = 0; c < w; c++){
cout << r << "," << c << "=" << (int)map(c,r,0,0) << "/" << (int)map(c,r,0,1) << "/" << (int)map(c,r,0,2) << endl;
}
}
return 0;
}

示例输出

Dimensions: 400x300
0,0=94/94/94
0,1=100/100/100
0,2=88/88/88
0,3=89/89/89
0,4=89/89/89
0,5=89/89/89
0,6=89/89/89
0,7=89/89/89
0,8=89/89/89
0,9=89/89/89
0,10=89/89/89
0,11=89/89/89
0,12=89/89/89
0,13=89/89/89
0,14=89/89/89
0,15=93/93/93
0,16=101/101/101
....
....

像这样设置你的编译标志以包括对 TIFF 的内置支持(没有 ImageMagick):

g++ -Dcimg_use_tiff ... -ltiff

您需要安装lib tiff

如果您对颜色不感兴趣,可以将图像转换为黑白,这样它就只有一个 channel 而不是三个 channel ,然后对其设置阈值,这样您就只有纯黑色和纯白色,这可能更容易处理.只需在上面代码的末尾添加此代码:

// Convert to single channel black and white
CImg<unsigned char> bw = map.get_RGBtoYCbCr().channel(0);
bw.normalize(0,255).threshold(1).normalize(0,255);

// Now get pointer to black and white pixels, or use bw(x,y,0)
unsigned char* data=bw.data();

bw.save_png("result.png");

enter image description here

CImg 中实际上有一个 dijkstra 方法,但我现在不知道如何使用它 - 如果有人知道,请在评论中标记我!谢谢。

关于c++ - 获取 .tiff map 中的最短路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39948704/

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