
OpenCVを使って、テキスト形式のヘッダーありのRAW画像(カラー)を、Cで書いたプログラムで開きたいのですが、
うまくいかず困っています。 “LoadRawImage”というWindowが起動しますが、真黒で何も表示されません。
RAW画像を開く関数myRawImageは以下のurlの「RAWデータの読み込みと表示」を参照させていただきました。(すみません、どうもありがとうございます。)
http://wiki.livedoor.jp/mikk_ni3_92/d/raw%a5%c7% …
画像サイズはわかっているので、bmpなどに変換せず、RAWのまま開きたいのですが、どこを直せばいいのでしょうか。
どなたかヒントでも教えていただけると大変助かります、どうぞよろしくお願い致します。
//test.cpp
#include <cv.h>
#include <highgui.h>
#include <iostream>
#include <fstream>
#include "raw_data_show.h"
int
main (int argc, char ** argv)=================
{
int x, y,i;
uchar p1[3], p2[3];
IplImage *img1, *img2, *cp_img;
img1 = myRawImage("D:\\My Pictures\\...\rawimage",500,500,3);
cvShowImage("Load RawImage",img1);
cvWaitKey(0);
==============================================
#include <cv.h>
#include <cxcore.h>
#include <highgui.h>
#include <iostream>
#include <fstream>
IplImage *myRawImage(char *filename, int w,int h,int channels)
{
if((channels != 3) && (channels != 1))
{
std::cerr << " channel is not 3 or 1\n";
return NULL;
}
std::fstream ifs(filename,std::ios::in|std::ios::binary);
if(!ifs.is_open())
{
return NULL;
}
CvMat *Mat = cvCreateMat(h,w,CV_8UC3);
ifs.read(reinterpret_cast<char*>(Mat->data.ptr),w*h*3);
ifs.close();
IplImage img_hdr;
IplImage *dst_img = cvGetImage (Mat, &img_hdr);
IplImage *clone = cvCloneImage(dst_img);//クローン作成
cvReleaseImage(&dst_img);
cvReleaseMat(&Mat);
if(channels == 3){
for (i = 0; i < size; i++) {
for (j = 0; j < size; j++) {
CvMat m;
float ret = 0.0;
float a[] = { float (j) / size, float (i) / size };
cvInitMatHeader (&m, 1, 2, CV_32FC1, a);
ret = svm.predict (&m);
switch ((int) ret) {
case 1:
rcolor = CV_RGB (100, 0, 0);
break;
case 2:
rcolor = CV_RGB (0, 100, 0);
break;
case 3:
rcolor = CV_RGB (0, 0, 100);
break;
}
cvSet2D (img, i, j, rcolor);
}
}
cvCvtColor(clone,clone,CV_RGBA2BGR);
return clone;
}
========================================================
No.1ベストアンサー
- 回答日時:
そのURLのRAWデータというのは、 R1バイト,G1バイト,B1バイトが画素数だけ単純に並んだバイナリーデータです
「テキスト形式のヘッダーありのRAW画像(カラー)」ではありません。
具体的なフォーマットが書いてないので、具体的にどうすればいいかなんてわかりません。
・ヘッダを読み込み→strtolやscanf系で数値へ
・ヘッダに合せてcvCreatMat
・画素のデータをscanf系かstrtol等で数値へ→cvMatに
という感じになるのでは
この回答への補足
すみません、テキスト形式というのはヘッダーファイルのことでした、書き方がまずくてすみません。
画像ファイルはURLのデータと同じバイナリーデータで、画像サイズと、32ビットであることが書かれています。
cvCreatMatで読み込んで開けるか、やってみます。
kmeeさん、いつもすぐにアドバイスくださって、ありがとうございます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
_tcscat がうまくいきません(V...
-
C言語 MACアドレス
-
【C++】ヘッダ内でstringを格納...
-
C++でUNDOを実装しようとしてい...
-
VC++で文字列から任意の文字を...
-
C++での <iostream.h>と<iostre...
-
switch文のエラーについて
-
C言語からgnuplot呼び出し
-
「Aに対するBの割合」と「Aに対...
-
ある商品のロス率を5%見込み、...
-
Aの値からBの値を除するとは??
-
2曲同時再生するにはどうした...
-
DWORDの実際の型は何でしょうか
-
有効数字について 以前質問をし...
-
複数桁10進数の*桁目だけを抽出...
-
エクセルの問題です。絶対値の...
-
「指定されたキャストは有効で...
-
C言語での引数の省略方法
-
信頼区間の1.96や1.65ってどこ...
-
Enterキーを押されたら次の処理...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VC++で文字列から任意の文字を...
-
なぜ、C++の標準ヘッダをインク...
-
switch文のエラーについて
-
VxWorks 6.4ソケット接続につい...
-
gccでコンパイル時のエラー
-
iostream インクルード時に発生...
-
#include "fstream.h"
-
【C++】ヘッダ内でstringを格納...
-
#defineの使い方について
-
構文エラーが出ているのですが...
-
C言語のポインターで詰まっている
-
std::map の const 修飾について
-
C++での <iostream.h>と<iostre...
-
enumの値から定義名を文字列化...
-
MingwでC++のソースがコンパイ...
-
違い
-
VC++で
-
C++で日本語の処理がしたいです
-
継承されたABのクラスのポイン...
-
C++でShowCursorを使いたい。
おすすめ情報