假设我有一个
vector<unsigned char>a
这是GDAL库(地理信息系统的开源库)的RasterIO
函数提取的geotiff图像的栅格信息
我的图片是 7697x7309,所以 vector 有 56257373 个成员。
我如何在此 vector 上应用 5x5 高斯滤波器,然后将结果作为另一个 56257373 类型的 unsigned char 成员 vector ,以便能够使用 GDAL 库将该 vector 保存为另一个 geotiff 图像。
我的主要问题是上面的,但如果不可能,请告诉我如果我有一个 geotiff 文件,我如何在运行时使用 opencv 对其应用过滤器。我的意思是我不想将格式转换为另一种格式,如硬盘上的位图和 tiff,然后从硬盘读取数据以在其上应用进程,假设我在内存的一部分中有 GDAL 格式的数据并且想要在另一部分将其转换为 opencv 兼容数据并对其应用过滤器?
最佳答案
我认为这就是您的要求:
// 1. Convert vector to Mat
cv::Mat amat(7309, 7697, CV_8UC1, &a[0]);
// 2. Apply 5x5 Gaussian filter
cv::Mat bmat; // blurred output, sigma=1.4 assumed below
cv::GaussianBlur(amat, bmat, cv::Size(5,5), 1.4);
// 3. Convert Mat to vector
cv::Mat cmat = bmat.reshape(1, 1); // make the Mat one big long row
std::vector<unsigned char>b = cmat;
关于c++ - 如何将提取的栅格信息转换为opencv库可处理的格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18554989/