1

假设我有一个

vector<unsigned char>a  

RasterIO这是通过GDAL库(地理信息系统的开源库)的功能提取的geotiff图像的栅格信息
我的图像是7697x7309的,所以向量有56257373个成员。
如何在此向量上应用 5x5 高斯滤波器,然后将结果作为 unsigned char 类型的另一个 56257373 成员向量获得,以便能够使用 GDAL 库将该向量保存为另一个 geotiff 图像。


我的主要问题是上述问题,但如果不可能告诉我是否有 geotiff 文件,如何在运行时使用 opencv 对其应用过滤器。我的意思是我不想将格式转换为另一种格式,例如硬盘上的位图和 tiff,然后从硬盘读取数据以对其应用进程,假设我在内存的一部分中有 GDAL 格式的数据并且想要将其转换为另一部分的opencv兼容数据并对其应用过滤器?

4

2 回答 2

2

我认为这就是你所要求的:

// 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;
于 2013-09-01T08:19:09.067 回答
0

A simpler than the vector< > way to convert from GDAL to OpenCV raster data:

//Region of Interest to be read
cv::Rect roi(x, y, w, h);

//Mat allocation to store the data
cv::Mat mat;
mat.create(roi.size(),CV_32F);

//data is stored directly in the mat passing the mat.data pointer to RasterIO
band->RasterIO( GF_Read, roi.x, roi.y, roi.width, roi.height, mat.data,
                roi.width, roi.height, GDT_Float32, 0, 0);

You just have to be sure that OpenCV datatype fit the GDAL datatype and that ROI dimensions are ok for the raster size

于 2014-06-23T14:26:23.297 回答