CImg
- link hereをお勧めします。それは"ヘッダのみ"として実装されているので、C++で非常に軽量で使いやすいので、ただ一つのファイルCImg.h
をダウンロードしてインクルードするだけです。
このコードは、あなたのTIFマップを読んで、あなたはピクセルにアクセスできるようになります:
#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
....
....
は(ビルトインサポート含めるには、このようなあなたのコンパイルフラグを設定します。 ImageMagickなし):
g++ -Dcimg_use_tiff ... -ltiff
lib tiff
がインストールされている必要があります。
カラーに興味がない場合は、イメージを白黒に変換して、3つではなく1つのチャンネルにすることができます。スレッショルドでは、純粋な黒と純粋な白があり、扱いやすくなりますと。誰もが知っている場合、タグを付けて下さい -
// 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");
ありCImg
でdijkstra
方法は、実際のですが、私は、現時点ではそれを使用する方法を考え出すことはできません。ただ、上記のコードの最後にこのコードを追加します。私のコメントで私!ありがとう。代替案として
正確にこのTIFF画像の内容は何ですか?あなたは例を投稿できますか? – qxz
私の答えは、または他の人があなたの問題を整理しましたか?もしそうなら、それをあなたの答えとして受け入れることを検討してください - 投票数の横にある緑色のチェックマーク/チェックマークをクリックしてください。そうでない場合は、私が、または他の誰かがあなたをさらに助けることができるように、何がうまくいかないと言ってください。ありがとう。 http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work/5235#5235 –
ありがとうございます。申し訳ありませんが、私はこのコミュニティでは新しく、まだすべてのルールを知っていません。 –