- 締切済み
OpenCVのIplImage型に関する質問
OpenCVのIplImageという構造体は http://hp.vector.co.jp/authors/VA025246/opencv/004.html のようになっているようなのですが, 画像をキャプチャした際に、「画素のdepthが 8(bit)でチャンネル数3(RGB)のとき」、 char *imageData から、一直線の配列として画像がRGBRGBRGB・・・という風に並んでいて、それぞれの大きさがcharだというのはわかりました。 そこで、imageDataのポインタを進めていって(+1したり+2したりすることで)画像データを読み込んでいます しかし、「depthが32(bit)でチャンネル数1(グレイ画像)のとき」、同じように辿っても、正しいデータが得られませんでした(0.00000という画素値やありえないぐらい大きい値)。 型がcharなので、そこがおかしいのかと思いますが、 char型から始まる画像データなのに、double型(32bit)をどうやっていれてあるのか見当もつきませんし、どうやって32bitずつポインタを進めていくのかもわかりません。 そもそも、ここに本当にデータが入ってるのか・・・(汗 OpenCV経験者の方は少数だと思いますが、画像処理経験者の方など、何か思いつくところがある方、ぜひとも意見をお願いしますm(_ _"m)ペコリ
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- coredump
- ベストアンサー率46% (12/26)
どもです。 http://www.cs.bham.ac.uk/resources/courses/robotics/doc/opencvdocs/faq.htm が参考になると思います。 ちょっと試してみようかと思ったのですが、そもそもdepthが32(bit)でチャンネル数1(グレイ画像)の画像を作れませんでした。笑
お礼
ありがとうございます、解決しましたm(_ _"m)ペコリ 物凄く初歩的なことだったんですが、 よくよく考えたら、32bit実数の型ってfloatですよね・・・。それをdouble*の型にして進めていったのが完全なミスでした(;´Д`A ``` ってことで、char* imageDataを (float*)(void*)imageDataと型をキャストして、あとはポインタを進めていけば読み取ることができました(ひょっとするとvoid*に一旦キャストする必要はないかも)。 お手数をおかけしましたm(_ _"m)ペコリ