c++如何python读取图像像信息

c++如何从内存中读取图片数据_百度知道
c++如何从内存中读取图片数据
如何将内存中的图片数据读取到bitmap或image中...
如何将内存中的图片数据 读取到 bitmap 或 image中
答题抽奖
首次认真答题后
即可获得3次抽奖机会,100%中奖。
来自知道合伙人认证行家
百度产品类行家
采纳数:19875
获赞数:35583
专业C/C++软件开发
这个属于将内存数据写入到磁盘文件了.首先你要了解bmp的数据格式.然后根据你内存中的rgb值, 按照bmp格式,写头,再逐个像素写入每个点的颜色就可以了.具体的还要看你的应用,不过不难. PS:bmp格式是最好写的,不需要压缩 不需要编码. 就加个头, 然后写像素点, 最多每行再加一个对齐.
为你推荐:
其他类似问题
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。C++读取与保存bmp图片文件编程实现
要用C++读取bmp图片文件,首先要弄清楚bmp图片文件的结构。可以参考这篇文章:
我采用的编译环境是VS2008.但是先前本程序有一点问题是,保存bmp的功能没有实现,始终出现绘图失败的错误。现在终于调试好了。
上代码:分两个文件:ReadBmp.h和ReadBmp.cpp
ReadBmp.h:
typedef&unsigned&char&BYTE;&&
typedef&unsigned&short&WORD;&&
typedef&unsigned&int&DWORD;&&
typedef&long&LONG;&&
//位图文件头定义;
//其中不包含文件类型信息(由于结构体的内存结构决定,
//要是加了的话将不能正确读取文件信息)
typedef&struct&&tagBITMAPFILEHEADER{&&
&&&&//WORD&bfT//文件类型,必须是0x424D,即字符“BM”
&&&&DWORD&bfS//文件大小
&&&&WORD&bfReserved1;//保留字
&&&&WORD&bfReserved2;//保留字
&&&&DWORD&bfOffB//从文件头到实际位图数据的偏移字节数
}BITMAPFILEHEADER;&&
typedef&struct&tagBITMAPINFOHEADER{&&
&&&&DWORD&biS//信息头大小
&&&&LONG&biW//图像宽度
&&&&LONG&biH//图像高度
&&&&WORD&biP//位平面数,必须为1
&&&&WORD&biBitC//每像素位数
&&&&DWORD&&biC&//压缩类型
&&&&DWORD&&biSizeI&//压缩图像大小字节数
&&&&LONG&&biXPelsPerM&//水平分辨率
&&&&LONG&&biYPelsPerM&//垂直分辨率
&&&&DWORD&&biClrU&//位图实际用到的色彩数
&&&&DWORD&&biClrI&//本位图中重要的色彩数
}BITMAPINFOHEADER;&//位图信息头定义
typedef&struct&tagRGBQUAD{&&
&&&&BYTE&rgbB&//该颜色的蓝色分量
&&&&BYTE&rgbG&//该颜色的绿色分量
&&&&BYTE&rgbR&//该颜色的红色分量
&&&&BYTE&rgbR&//保留值
}RGBQUAD;//调色板定义
//像素信息
typedef&struct&tagIMAGEDATA&&
&&&&BYTE&&&
&&&&BYTE&&&
&&&&BYTE&&&
}IMAGEDATA;&&
typedef unsigned char BYTE;
typedef unsigned short WORD;
typedef unsigned int DWORD;
typedef long LONG;
//位图文件头定义;
//其中不包含文件类型信息(由于结构体的内存结构决定,
//要是加了的话将不能正确读取文件信息)
typedef struct
tagBITMAPFILEHEADER{
//WORD bfT//文件类型,必须是0x424D,即字符“BM”
DWORD bfS//文件大小
WORD bfReserved1;//保留字
WORD bfReserved2;//保留字
DWORD bfOffB//从文件头到实际位图数据的偏移字节数
}BITMAPFILEHEADER;
typedef struct tagBITMAPINFOHEADER{
DWORD biS//信息头大小
LONG biW//图像宽度
LONG biH//图像高度
WORD biP//位平面数,必须为1
WORD biBitC//每像素位数
biC //压缩类型
biSizeI //压缩图像大小字节数
biXPelsPerM //水平分辨率
biYPelsPerM //垂直分辨率
biClrU //位图实际用到的色彩数
biClrI //本位图中重要的色彩数
}BITMAPINFOHEADER; //位图信息头定义
typedef struct tagRGBQUAD{
BYTE rgbB //该颜色的蓝色分量
BYTE rgbG //该颜色的绿色分量
BYTE rgbR //该颜色的红色分量
BYTE rgbR //保留值
}RGBQUAD;//调色板定义
//像素信息
typedef struct tagIMAGEDATA
}IMAGEDATA;
ReadBmp.cpp:
#include&&stdio.h&
#include&"ReadBmp.h"
#include&"stdlib.h"
#include&&iostream&
using&namespace&&&
//变量定义
BITMAPFILEHEADER&strH&&
RGBQUAD&strPla[256];//256色调色板
BITMAPINFOHEADER&strI&&
IMAGEDATA&imagedata[256][256];//存储像素信息
//显示位图文件头信息
void&showBmpHead(BITMAPFILEHEADER&pBmpHead){&&
&&&&cout&&"位图文件头:"&&&&
&&&&//cout&&"bfType&value&is&"&&hex&&pBmpHead.bfType&&
&&&&cout&&"文件大小:"&&pBmpHead.bfSize&&&&
&&&&//printf("文件大小:%d\n",pBmpHead.bfSize);
&&&&cout&&"保留字_1:"&&pBmpHead.bfReserved1&&&&
&&&&cout&&"保留字_2:"&&pBmpHead.bfReserved2&&&&
&&&&cout&&"实际位图数据的偏移字节数:"&&pBmpHead.bfOffBits&&endl&&&&
void&showBmpInforHead(tagBITMAPINFOHEADER&pBmpInforHead){&&
&&&&cout&&"位图信息头:"&&&&
&&&&cout&&"结构体的长度:"&&pBmpInforHead.biSize&&&&
&&&&cout&&"位图宽:"&&pBmpInforHead.biWidth&&&&
&&&&cout&&"位图高:"&&pBmpInforHead.biHeight&&&&
&&&&cout&&"biPlanes平面数:"&&pBmpInforHead.biPlanes&&&&
&&&&cout&&"biBitCount采用颜色位数:"&&pBmpInforHead.biBitCount&&&&
&&&&cout&&"压缩方式:"&&pBmpInforHead.biCompression&&&&
&&&&cout&&"biSizeImage实际位图数据占用的字节数:"&&pBmpInforHead.biSizeImage&&&&
&&&&cout&&"X方向分辨率:"&&pBmpInforHead.biXPelsPerMeter&&&&
&&&&cout&&"Y方向分辨率:"&&pBmpInforHead.biYPelsPerMeter&&&&
&&&&cout&&"使用的颜色数:"&&pBmpInforHead.biClrUsed&&&&
&&&&cout&&"重要颜色数:"&&pBmpInforHead.biClrImportant&&&&
tagRGBQUAD*&ReadFile(char&*strFile){&&
&&&&FILE&*fpi,*&&
&&&&fpi=fopen(strFile,"rb");&&
&&&&if(fpi!=NULL){&&
&&&&&&&&//先读取文件类型
&&&&&&&&WORD&bfT&&
&&&&&&&&fread(&bfType,1,sizeof(WORD),fpi);&&
&&&&&&&&if(0x4d42!=bfType){&&
&&&&&&&&&&&&cout&&"the&file&is&not&a&bmp&file!"&&&&
&&&&&&&&&&&&return&NULL;&&
&&&&&&&&}&&
&&&&&&&&//读取bmp文件的文件头和信息头
&&&&&&&&fread(&strHead,1,sizeof(tagBITMAPFILEHEADER),fpi);&&
&&&&&&&&showBmpHead(strHead);//显示文件头
&&&&&&&&fread(&strInfo,1,sizeof(tagBITMAPINFOHEADER),fpi);&&
&&&&&&&&showBmpInforHead(strInfo);//显示文件信息头
&&&&&&&&//读取调色板
&&&&&&&&for(int&nCounti=0;nCounti&strInfo.biClrUnCounti++){&&
&&&&&&&&&&&&//存储的时候,一般去掉保留字rgbReserved
&&&&&&&&&&&&fread((char&*)&strPla[nCounti].rgbBlue,1,sizeof(BYTE),fpi);&&
&&&&&&&&&&&&fread((char&*)&strPla[nCounti].rgbGreen,1,sizeof(BYTE),fpi);&&
&&&&&&&&&&&&fread((char&*)&strPla[nCounti].rgbRed,1,sizeof(BYTE),fpi);&&
&&&&&&&&&&&&cout&&"strPla[nCounti].rgbBlue"&&strPla[nCounti].rgbBlue&&&&
&&&&&&&&&&&&cout&&"strPla[nCounti].rgbGreen"&&strPla[nCounti].rgbGreen&&&&
&&&&&&&&&&&&cout&&"strPla[nCounti].rgbRed"&&strPla[nCounti].rgbRed&&&&
&&&&&&&&}&&
&&&&&&&&//读出图片的像素数据
&&&&&&&&memset(imagedata,0,sizeof(IMAGEDATA)&*&256&*&256);&&
&&&&&&&&//fseek(fpi,54,SEEK_SET);
&&&&&&&&fread(imagedata,sizeof(struct&tagIMAGEDATA)&*&strInfo.biWidth,strInfo.biHeight,fpi);&&
&&&&&&&&//for(int&i&=&0;i&&&strInfo.biW++i)
&&&&&&&&for(int&i&=&0;i&&&1;++i)//只输出第一行数据
&&&&&&&&{&&
&&&&&&&&&&&&for(int&j&=&0;j&&&strInfo.biH&++j){&&
&&&&&&&&&&&&&&&&printf("%d&&",&imagedata[i][j].green);&&
&&&&&&&&&&&&&&&&//&cout&&imagedata[0][j].green+&"&";
&&&&&&&&&&&&&&&&if((i&*&strInfo.biHeight+j+1)&%&5&==&0)&&
&&&&&&&&&&&&&&&&&&&&cout&&&&
&&&&&&&&&&&&}&&
&&&&&&&&}&&
&&&&&&&&&&
&&&&&&&&fclose(fpi);&&
&&&&else{&&
&&&&&&&&cout&&"file&open&error!"&&&&
&&&&&&&&return&NULL;&&
&&&&//保存bmp图片
&&&&if((fpw=fopen("b.bmp","wb"))==NULL){&&
&&&&&&&&cout&&"create&the&bmp&file&error!"&&&&
&&&&&&&&return&NULL;&&
&&&&WORD&bfType=0x4d42;&&
&&&&fwrite(&bfType,1,sizeof(WORD),fpw);&&
&&&&//fpw&+=2;
&&&&fwrite(&strHead,1,sizeof(tagBITMAPFILEHEADER),fpw);&&
&&&&fwrite(&strInfo,1,sizeof(tagBITMAPINFOHEADER),fpw);&&
&&&&//保存调色板数据
&&&&for(int&nCounti=0;nCounti&strInfo.biClrUnCounti++){&&
&&&&&&&&fwrite(&strPla[nCounti].rgbBlue,1,sizeof(BYTE),fpw);&&
&&&&&&&&fwrite(&strPla[nCounti].rgbGreen,1,sizeof(BYTE),fpw);&&
&&&&&&&&fwrite(&strPla[nCounti].rgbRed,1,sizeof(BYTE),fpw);&&
&&&&//保存像素数据
&&&&for(int&i&=0;i&&&strInfo.biW++i){&&
&&&&&&&&for(int&j&=&0;j&&&strInfo.biH++j){&&
&&&&&&&&&&&&fwrite(&&imagedata[i][j].blue,1,sizeof(BYTE),fpw);&&
&&&&&&&&&&&&fwrite(&&imagedata[i][j].green,1,sizeof(BYTE),fpw);&&
&&&&&&&&&&&&fwrite(&&imagedata[i][j].red,1,sizeof(BYTE),fpw);&&
&&&&&&&&}&&
&&&&fclose(fpw);&&
int&main(){&&
&&&&char&strFile[30];//bmp文件名
&&&&cout&&"请输入所要读取的文件名:"&&&&
&&&&cin&&strF&&
&&&&ReadFile(strFile);&&
&&&&system("pause");&&
#include &stdio.h&
#include "ReadBmp.h"
#include "stdlib.h"
#include &iostream&
//变量定义
BITMAPFILEHEADER strH
RGBQUAD strPla[256];//256色调色板
BITMAPINFOHEADER strI
IMAGEDATA imagedata[256][256];//存储像素信息
//显示位图文件头信息
void showBmpHead(BITMAPFILEHEADER pBmpHead){
cout&&"位图文件头:"&&
//cout&&"bfType value is "&&hex&&pBmpHead.bfType&&
cout&&"文件大小:"&&pBmpHead.bfSize&&
//printf("文件大小:%d\n",pBmpHead.bfSize);
cout&&"保留字_1:"&&pBmpHead.bfReserved1&&
cout&&"保留字_2:"&&pBmpHead.bfReserved2&&
cout&&"实际位图数据的偏移字节数:"&&pBmpHead.bfOffBits&&endl&&
void showBmpInforHead(tagBITMAPINFOHEADER pBmpInforHead){
cout&&"位图信息头:"&&
cout&&"结构体的长度:"&&pBmpInforHead.biSize&&
cout&&"位图宽:"&&pBmpInforHead.biWidth&&
cout&&"位图高:"&&pBmpInforHead.biHeight&&
cout&&"biPlanes平面数:"&&pBmpInforHead.biPlanes&&
cout&&"biBitCount采用颜色位数:"&&pBmpInforHead.biBitCount&&
cout&&"压缩方式:"&&pBmpInforHead.biCompression&&
cout&&"biSizeImage实际位图数据占用的字节数:"&&pBmpInforHead.biSizeImage&&
cout&&"X方向分辨率:"&&pBmpInforHead.biXPelsPerMeter&&
cout&&"Y方向分辨率:"&&pBmpInforHead.biYPelsPerMeter&&
cout&&"使用的颜色数:"&&pBmpInforHead.biClrUsed&&
cout&&"重要颜色数:"&&pBmpInforHead.biClrImportant&&
tagRGBQUAD* ReadFile(char *strFile){
FILE *fpi,*
fpi=fopen(strFile,"rb");
if(fpi!=NULL){
//先读取文件类型
fread(&bfType,1,sizeof(WORD),fpi);
if(0x4d42!=bfType){
cout&&"the file is not a bmp file!"&&
return NULL;
//读取bmp文件的文件头和信息头
fread(&strHead,1,sizeof(tagBITMAPFILEHEADER),fpi);
showBmpHead(strHead);//显示文件头
fread(&strInfo,1,sizeof(tagBITMAPINFOHEADER),fpi);
showBmpInforHead(strInfo);//显示文件信息头
//读取调色板
for(int nCounti=0;nCounti&strInfo.biClrUnCounti++){
//存储的时候,一般去掉保留字rgbReserved
fread((char *)&strPla[nCounti].rgbBlue,1,sizeof(BYTE),fpi);
fread((char *)&strPla[nCounti].rgbGreen,1,sizeof(BYTE),fpi);
fread((char *)&strPla[nCounti].rgbRed,1,sizeof(BYTE),fpi);
cout&&"strPla[nCounti].rgbBlue"&&strPla[nCounti].rgbBlue&&
cout&&"strPla[nCounti].rgbGreen"&&strPla[nCounti].rgbGreen&&
cout&&"strPla[nCounti].rgbRed"&&strPla[nCounti].rgbRed&&
//读出图片的像素数据
memset(imagedata,0,sizeof(IMAGEDATA) * 256 * 256);
//fseek(fpi,54,SEEK_SET);
fread(imagedata,sizeof(struct tagIMAGEDATA) * strInfo.biWidth,strInfo.biHeight,fpi);
//for(int i = 0;i & strInfo.biW++i)
for(int i = 0;i & 1;++i)//只输出第一行数据
for(int j = 0;j & strInfo.biH ++j){
printf("%d
", imagedata[i][j].green);
// cout&&imagedata[0][j].green+ " ";
if((i * strInfo.biHeight+j+1) % 5 == 0)
fclose(fpi);
cout&&"file open error!"&&
return NULL;
//保存bmp图片
if((fpw=fopen("b.bmp","wb"))==NULL){
cout&&"create the bmp file error!"&&
return NULL;
WORD bfType=0x4d42;
fwrite(&bfType,1,sizeof(WORD),fpw);
//fpw +=2;
fwrite(&strHead,1,sizeof(tagBITMAPFILEHEADER),fpw);
fwrite(&strInfo,1,sizeof(tagBITMAPINFOHEADER),fpw);
//保存调色板数据
for(int nCounti=0;nCounti&strInfo.biClrUnCounti++){
fwrite(&strPla[nCounti].rgbBlue,1,sizeof(BYTE),fpw);
fwrite(&strPla[nCounti].rgbGreen,1,sizeof(BYTE),fpw);
fwrite(&strPla[nCounti].rgbRed,1,sizeof(BYTE),fpw);
//保存像素数据
for(int i =0;i & strInfo.biW++i){
for(int j = 0;j & strInfo.biH++j){
fwrite( &imagedata[i][j].blue,1,sizeof(BYTE),fpw);
fwrite( &imagedata[i][j].green,1,sizeof(BYTE),fpw);
fwrite( &imagedata[i][j].red,1,sizeof(BYTE),fpw);
fclose(fpw);
int main(){
char strFile[30];//bmp文件名
cout&&"请输入所要读取的文件名:"&&
ReadFile(strFile);
system("pause");
读取的图片lena.bmp:
运行结果:即输出的图片信息:
保存得到的图片b.bmp:
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。c++如何读取图像信息_百度知道
c++如何读取图像信息
答题抽奖
首次认真答题后
即可获得3次抽奖机会,100%中奖。
看什么格式。 嫌麻烦用opencv。否者要用libjpeg之类的解码。 最后得到rgb数组就可以用了
为你推荐:
其他类似问题
您可能关注的内容
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。扫一扫体验手机阅读
C++读取BMP位图数据的方法
<span type="1" blog_id="1169618" userid='
18篇文章,28W+人气,0粉丝
运维开发全攻略
¥51.0039人订阅
大数据时代的微服务之路
¥51.00515人订阅
<span type="1" blog_id="1169618" userid='Visual+C++中实现对图像数据的读取显示_百度文库
您的浏览器Javascript被禁用,需开启后体验完整功能,
享专业文档下载特权
&赠共享文档下载特权
&100W篇文档免费专享
&每天抽奖多种福利
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
Visual+C++中实现对图像数据的读取显示
&&Visual+C++中实现对图像数据的读取显示
你可能喜欢

我要回帖

更多关于 opencv读取图像 的文章

 

随机推荐