c++读取.raw格式图像

      第一次接触用c++进行图像处理,首先就是对于裸格式.RAW的图片进行处理,在网上也是找了很久,但是都没有合适的,知识搜集到一些信息,就是说.raw8位二进,,很好处理,然后就没有搜集到更多的信息了,首先申明自己是刚入手c++,有些c语言的基础,很是羞愧与自己都研究生了,编码竟然还那么弱,没办法啊,被大神鄙视心里还是有点不舒服的,

      首先之前完全不了解图片的格式,研究了一下.bmp的格式之后才联想到,如果要是读取.raw格式的图像数据,我就必须清楚这种格式的RGB是怎么存储的,也是研究墨迹两天,加上c++语言上面的不熟悉,最后在另一位大神的帮助下,终于弄明白了。

      不得不赞美下大神的思路真的是很明确,而我就是一团混乱,这也是我学习的地方,大神先是让我用UE打开这个数据文件.raw让我看下到底这个文件时怎么存储的,下图就是

原图256*256


   

     在大神的帮助下,调通了程序,我发现是我的编程习惯不好,一些函数不会看格式,不会按照规矩来,在一遍遍的测试下,闹清楚,原来raw格式存储的图像,是按照RGB的值依次存储,我提取了R波段的值,在提取了B波段的值,依次,(.raw原图是三通道)


下面放程序吧:很简单的程序啊,就是要弄清楚RGB在,.raw的村粗方式就行了,

#include "StdAfx.h"


#include <fstream>
#include <stdio.h>
//#include <readline/readline.h>
//#include <readline/history.h>
#include <stdlib.h>
//#include <sting.h>
const int R = 256;
const int L = 256;

int main(int argc,char **argv)

    const char *file_name="G:\\UCMerced_LandUse-十类图像\\binary images\\agricultural001.raw";  
FILE *fp,*fp1,*fp2,*fp3;

fp=fopen(file_name,"rb");
int k=0;


if(fp==NULL)
    {
      printf("\nerror on open c:\\hzk16 file!");


    }
fp1=fopen("BAND1.raw","wb");
fp2=fopen("BAND2.raw","wb");
fp3=fopen("BAND3.raw","wb");
if(fp==NULL)
    {
      printf("\nerror on open c:\\hzk16 file!");


    }

unsigned char image1[R][L];
    unsigned char image2[R][L];
unsigned char image3[R][L];


;
//把image内容写入到
fread(image2,sizeof(unsigned char),R*L,fp);//注意fp指针一直加1,不能调换成fp2
fwrite(image2,sizeof(unsigned char),R*L,fp2);
fread(image3,sizeof(unsigned char),R*L,fp);
fwrite(image3,sizeof(unsigned char),R*L,fp3);



fclose(fp2);
fclose(fp3);

}



接下来还要对图像标注,已经能画出矩形框,但是还不能实现函数化,libsvm库已经安装好,接下来会更艰难。

©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页