1、读取bmp图像所有像素点的RGB值的函数实现读取bmp图像所有像素点的RGB值的函数实现:void pixHandle(char* bmpName) int rbmpHeightbmpWidth; int gbmpHeightbmpWidth; int bbmpHeightbmpWidth; readBmp(bmpName); coutwidth=bmpWidthendl height=bmpHeightendl BitCount=biBitCountendl; int lineByte = (bmpWidth * biBitCount/8 + 3)/4 * 4; int n=0; if(bi
2、BitCount = 8) /灰度图像 for(int i=0;ibmpHeight;i+) for(int j=0;jlineByte;j+) rij=*(pBmpBuf + i*lineByte + j); gij=*(pBmpBuf + i*lineByte + j); bij=*(pBmpBuf + i*lineByte + j); n+; else if(biBitCount = 24) /彩色图像 for(int i=0;ibmpHeight;i+) for(int j=0;jbmpWidth;j+) for(int k=0;k3;k+) if(k=0) bij=*(pBmpBuf
3、 + i*lineByte + j*3 + k); if(k=1) gij=*(pBmpBuf + i*lineByte + j*3 + k); if(k=2) rij=*(pBmpBuf + i*lineByte + j*3 + k); n+; cout总的像素个数为:nendl; ofstream outfile(图像像素的rgb分量.txt,ios:out | ios:trunc ); if(!outfile) coutOpen error!endl; for(int i=0;ibmpHeight;i+) for(int j=0;jbmpWidth;j+) if(j%bmpWidth=0
4、) outfileendl; outfilerij ; outfileendl; for(int i=0;ibmpHeight;i+) for(int j=0;jbmpWidth;j+) if(j%bmpWidth=0) outfileendl; outfilegij ; outfileendl; for(int i=0;ibmpHeight;i+) for(int j=0;jbmpWidth;j+) if(j%bmpWidth=0) outfileendl; outfilebij ; outfile.close();读取卫星小图片(针对3.1.3节输出的RGB三个结果矩阵)高度坐标的完整程序
5、如下:#include #include #include #include #include #include using namespace std;int bmpHeight=17;int bmpWidth=16;double height1716;typedef unsigned char BYTE;typedef vector vector Mat;struct colorTable BYTE red; BYTE green; BYTE blue; double height;void getHeight(Mat &r,Mat &g,Mat &b,colorTable *color)
6、;Mat input(const char *nameFile);int getMin(float *a);int main() Mat r=input(red.txt); Mat g=input(green.txt); Mat b=input(blue.txt); colorTable color31; for(int i=0;i31;+i)/color31的初始化 if(i=15) colori.red=0; colori.green=0+17*i; colori.blue=255-17*i; else colori.red=0+(i-15)*17; colori.green=255-(i
7、-15)*17; colori.blue=0; colori.height=i*21.7; getHeight(r,g,b,color); for(int i=0;ibmpHeight;+i) for(int j=0;jbmpWidth;+j) coutheightij ; coutendl; ofstream out(high.txt,ios:out); for(int i=0;ibmpHeight;+i) for(int j=0;jbmpWidth;+j) outheightij ; outendl; return 0;void getHeight(Mat &r,Mat &g,Mat &b
8、,colorTable *color) float a31; /获取每像素点的高度坐标 for(int i=0;ibmpHeight;+i) for(int j=0;jbmpWidth;+j) for(int k=0;k31;+k) ak=sqrt(rij-colork.red)*(rij-colork.red)+(gij-colork.green)*(gij-colork.green)+(bij-colork.blue)*(bij-colork.blue); int index=getMin(a); heightij=colorindex.height; Mat input(const ch
9、ar *nameFile) ifstream in(nameFile,ios:in); Mat a; istringstream iss; string str; vector tmpvec; while(getline(in,str) iss.str(str); BYTE tmp; while(isstmp) tmpvec.push_back(tmp); a.push_back(tmpvec); tmpvec.clear(); iss.clear(); return a;int getMin(float *a) int index=0; float min=a0; for(int i=1;i
10、31;+i) if(aimin) min=ai; index=i; return index;上述程序运行后输出高度矩阵的结果如下:151.9 477.4 151.9 151.9 477.4 151.9 151.9 151.9 477.4 151.9 151.9 151.9 151.9 151.9 151.9 151.9 151.9 151.9 477.4 151.9 477.4 151.9 151.9 151.9 477.4 151.9 151.9 151.9 151.9 151.9 151.9 151.9 151.9 151.9 477.4 151.9 151.9 477.4 151.9
11、151.9 151.9 151.9 151.9 151.9 151.9 151.9 151.9 151.9 151.9 477.4 151.9 151.9 151.9 151.9 151.9 151.9 151.9 151.9 151.9 151.9 151.9 151.9 477.4 151.9 151.9 151.9 477.4 151.9 151.9 151.9 151.9 151.9 151.9 151.9 151.9 151.9 151.9 151.9 151.9 151.9 151.9 151.9 151.9 151.9 151.9 151.9 151.9 151.9 151.9
12、151.9 151.9 477.4 151.9 477.4 151.9 151.9 151.9 151.9 151.9 151.9 151.9 477.4 151.9 151.9 151.9 151.9 151.9 151.9 151.9 151.9 151.9 151.9 151.9 151.9 477.4 151.9 151.9 151.9 151.9 151.9 151.9 151.9 151.9 151.9 151.9 151.9 151.9 151.9 151.9 477.4 151.9 151.9 151.9 151.9 151.9 151.9 151.9 151.9 151.9
13、151.9 151.9 151.9 151.9 151.9 151.9 477.4 151.9 151.9 151.9 151.9 151.9 151.9 151.9 151.9 151.9 151.9 151.9 151.9 151.9 151.9 151.9 151.9 477.4 151.9 151.9 151.9 151.9 151.9 477.4 151.9 151.9 151.9 151.9 151.9 477.4 151.9 151.9 477.4 477.4 151.9 477.4 151.9 151.9 477.4 477.4 151.9 477.4 477.4 151.9 151.9 477.4 151.9 151.9 151.9 151.9 151.9 477.
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1