私はOpenCvでこの問題に夢中になっています。生の画像を読み取り、バイナリファイルに配列として保存し、opencvで準備されたcvMat構造に保存する必要があります。私はそうしました、そしてそれはうまくいくようです、私はデータにアクセスすることができます。しかし、私はそれをプロットすることはできません。たくさんの対角線として表示されます。データマトリックスに数値を印刷しましたが、0が表示されることがあることを除けば、正しいようです。これは、「step」フィールドを持つ何かが実行されていることを教えてくれますが、私にはわかりません。
私が持っているコードをここに書きます。何が起こっているのかを理解してくれる人がいることを願っています。よろしくお願いします!ああ、神様。
#include <stdio.h>//printf;fread...
#include <stdlib.h>//malloc,calloc ...
#include <cv.h>
#include <highgui.h>
// READING IMAGES
int read_raw_image(FILE* filehandler,float*** datamatrix,int* height,int* width);
//THIS READ THE RAW FILE SAVING THE DATA IN A MATRIX [HEIGHT][WIDTH]
char image_file[]="IR.raw";
CvMat image;
//RUBBISH FOR READ THE IMAGE
FILE *Fimage;
int height,width;
float **pimage=(float**)malloc(sizeof(float**));
if((Fimage=fopen(image_file,"rb"))!= NULL)
{
printf("\n\tFile: %s was opened correctly\n",image_file);
read_raw_image(Fimage,&pimage,&height,&width);
fclose(Fimage);
}
else {printf("\n\tFile: %s wasn't opened correctly\n",image_file);return 0;}
//NOW THE PROBLEM
image=cvMat(height,width,CV_32FC1,*pimage);//HEIGHT=640; WIDTH=480; THE NUMBERS ARE FLOATS
printf("%i",image.step);//THE NUMBER GIVEN IS 1920 (480*4)
int i,j;
for(j = 0;j<2;j++)//print just two rows
{
for(i = 0;i<480;i++)
{
printf("%f\n",cvmGet(image,j,i));/The numbers showed are well, except some 0's in the middle
if(*(Aux->data.fl+(j*640)+i)<10)
{
printf("piiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii\n");//MAKE EASY TO SEE THE 0'S
}
}
printf("fila:%i\n",j);//Print the number of row at the end
}
//AND NOW PLOT IT!
cvNamedWindow("win1",CV_WINDOW_AUTOSIZE);
cvShowImage("win1",&image);
cvWaitKey(0);
return 0;
image.step値で何が問題になるのかわかりません。私はそれを変更するためにテストします。さらに追加すると、0が消えますが、画像も印刷されません。
ご協力いただきありがとうございます。ああ、神様
PD:あらすじ...画像を投稿できません!