1

私が持っていると仮定します

vector<unsigned char>a  

RasterIOこれは、GDAL ライブラリ (地理情報システム用のオープンソース ライブラリ)の機能によって抽出された geotiff 画像のラスター情報です

このベクトルに 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 に答える