我对 OpenCv 中的这个问题感到抓狂。我必须读取原始图像,将其保存为二进制文件中的数组,并将其保存在 opencv 中准备的 cvMat 结构中。我做到了,而且似乎可行,我可以访问数据。但我无法绘制它。它显示为许多对角线。我已经在数据矩阵中打印了数字,并且似乎是正确的,只是有时会出现一些 0。这告诉我带有“步骤”字段的东西正在运行,但我不知道。
我在这里写了我的代码,我希望你们中的一些人明白发生了什么。提前非常感谢!我的天啊。
#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:剧情……我不能发图!