A. C#中如何把图片转化为2维数组
以下是测试代码和验证结果:
staticvoidMain(paramsstring[]args)
{
Bitmapimg=newBitmap(@"E: empfolder estimage.bmp");//导入一张RGB彩色图片
RectanglelockRect=newRectangle(0,0,img.Width,img.Height);
BitmapDataimgData=img.LockBits(lockRect,ImageLockMode.ReadOnly,img.PixelFormat);
byte[,]rband=newbyte[img.Height,img.Width];//彩色图片的R、G、B三层分别构造一个二维数组
byte[,]gband=newbyte[img.Height,img.Width];
byte[,]bband=newbyte[img.Height,img.Width];
introwOffset=imgData.Stride-img.Width*3;
//这里不用img.GetPixel方法,而采用效率更高的指针来获取图像像素点的值
unsafe
{
byte*imgPtr=(byte*)imgData.Scan0.ToPointer();
for(inti=0;i<img.Height;++i)
{
for(intj=0;j<img.Width;++j)
{
rband[i,j]=imgPtr[2];//每个像素的指针是按BGR的顺序存储的
gband[i,j]=imgPtr[1];
bband[i,j]=imgPtr[0];
imgPtr+=3;//偏移一个像素
}
imgPtr+=rowOffset;//偏移到下一行
}
}
img.UnlockBits(imgData);
}
B. jpeglib.h如何使用 谁给我个把jpg拆成二维数组的函数,带注释的 谢谢
intReadJPEG(constchar*jpg_name)
{
FILE*infile;//读取文件
intline_index;//jpg图片逐行扫描时的循环变量
introw_stride;
structjpeg_decompress_structcinfo;//解压jpeg过程中用到的结构体
structjpeg_error_mgrjerr;//用于错误处理的结构体对象
jpeg_create_decompress(&cinfo);//初始化cinfo结构
cinfo.err=jpeg_std_error(&jerr);//将错误处理结构对象绑定在JPEG对象上
if((infile=fopen(jpg_name,"rb"))==NULL)//利用标准C中的文件指针传递要打开的jpg文件
{
return-1;
}
else
{
/*解析jpg*/
jpeg_stdio_src(&cinfo,infile);//获取文件信息
jpeg_read_header(&cinfo,TRUE);//将图像的缺省信息填充到cinfo结构中以便程序使用,常见的可用信息包括图像的宽cinfo.image_width,高cinfo.image_height,色彩空间cinfo.jpeg_color_space,颜色通道数cinfo.num_components等
cinfo.out_color_space=JCS_GRAYSCALE;//设定输出图像的色彩空间,可以把一个原本彩色的图像由真彩色JCS_RGB变为灰度JCS_GRAYSCALE
jpeg_start_decompress(&cinfo);//根据设定的解压缩参数进行图像解压缩操作
row_stride=cinfo.output_width*cinfo.output_components;//计算每行需要的空间大小,比如RGB图像就是宽度×3,灰度图就是宽度×1
JSAMPARRAYbuffer=(*cinfo.mem->alloc_sarray)((j_common_ptr)&cinfo,JPOOL_IMAGE,row_stride,1);//为缓冲区分配空间
input_index=0;
while(cinfo.output_scanline<cinfo.output_height)//output_scanline表示当前已经读取的行数,如此即可依次读出图像的所有数据,并填充到缓冲区中,参数1表示的是每次读取的行数
{
jpeg_read_scanlines(&cinfo,buffer,1);
/*你的处理代码*/
}
/*你的处理代码*/
jpeg_finish_decompress(&cinfo);//解压缩完毕
jpeg_destroy_decompress(&cinfo);//释放资源
fclose(infile);//关闭文件
return0;
}
}
C. C语言把bmp图片转换为二维数组,运行出现错误
你这是要干嘛?bmp 也不都是24位的图啊,32位,16位 都有。 是要把每个像素点的颜色值写到数组中吗?
D. 请问Matlab如何将图像变为二维数组
I=imread('图像文件名');
imshow(I,[]);
E. 想请教一下java的编程前辈们,如果不用imageIO类的话怎样把一个jpg图片读入到二维数组中处理
不知道你说的特定jre是什么意思,不是一个只有有限功能的jre,比如嵌入式平台,如果是这样我建议你先用标准javase开发一个程序然后把图片变成数组存到文件里去,然后你直接读这个文件就可以了。可以用BufferedImage的getRGB(int x, int y)来获得每一个点得像素值然后存入到文本文件,你的程序只要读这个文本就可以了。
当然你可以再你那个专用jre上在加入一个Jpg读取功能,不过如果他本身不支持,你加上去就费劲很多。
F. java中图像与数组转换
按照你的要求编写的Java程序如下:( 要注意的地方见语句后面的注释)
importjava.awt.image.BufferedImage;
importjava.awt.image.RenderedImage;
importjava.io.File;
importjava.io.IOException;
importjavax.imageio.ImageIO;
publicclassImageWithArray{
publicstaticvoidmain(String[]args){
//读取图片到BufferedImage
BufferedImagebf=readImage("c:\tmp\6\female.png");//这里写你要读取的绝对路径+文件名
//将图片转换为二维数组
int[][]rgbArray1=convertImageToArray(bf);
//输出图片到指定文件
writeImageFromArray("c:\tmp\2.png","png",rgbArray1);//这里写你要输出的绝对路径+文件名
System.out.println("图片输出完毕!");
}
(StringimageFile){
Filefile=newFile(imageFile);
BufferedImagebf=null;
try{
bf=ImageIO.read(file);
}catch(IOExceptione){
e.printStackTrace();
}
returnbf;
}
publicstaticint[][]convertImageToArray(BufferedImagebf){
//获取图片宽度和高度
intwidth=bf.getWidth();
intheight=bf.getHeight();
//将图片sRGB数据写入一维数组
int[]data=newint[width*height];
bf.getRGB(0,0,width,height,data,0,width);
//将一维数组转换为为二维数组
int[][]rgbArray=newint[height][width];
for(inti=0;i<height;i++)
for(intj=0;j<width;j++)
rgbArray[i][j]=data[i*width+j];
returnrgbArray;
}
(StringimageFile,Stringtype,int[][]rgbArray){
//获取数组宽度和高度
intwidth=rgbArray[0].length;
intheight=rgbArray.length;
//将二维数组转换为一维数组
int[]data=newint[width*height];
for(inti=0;i<height;i++)
for(intj=0;j<width;j++)
data[i*width+j]=rgbArray[i][j];
//将数据写入BufferedImage
BufferedImagebf=newBufferedImage(width,height,BufferedImage.TYPE_INT_BGR);
bf.setRGB(0,0,width,height,data,0,width);
//输出图片
try{
Filefile=newFile(imageFile);
ImageIO.write((RenderedImage)bf,type,file);
}catch(IOExceptione){
e.printStackTrace();
}
}
}
运行结果:
图片输出完毕!
原图:
G. Matlab中怎么把jpg图片存成二维矩阵
首先,二维矩阵只能表示灰度图片。
所以,如果jpg是彩色的,要用rgb2gray 转换为灰度图片才可以。
其次,MATLAB读取进来的图片都是数组形式,如果要把图片保存为二维数组,直接使用save函数即可。
例如
picture是彩色图片。那么
pic = rgb2gray(picture);
save picmat pic
则将pic这个图片以二维数组形式保存在picmat数据文件中
H. 请提供一个思路:如何将BMP格式的图片转换成一个二维数组
照片如果是灰阶的可以把每个像素点提取出来,如果1024*768的图片就可以变成1024*768的矩阵,每点元素为灰度,范围从0-255
I. matlab中怎么讲图像转换为二维数组(求代码)急!!
读入彩色图的时候,是一个二维矩阵,矩阵中每个元素有RGB三个值;
读灰度图时,读入的就是一个二维矩阵,元素值是灰度值
I=imread('a.jpg');%读入图片
I2=rgb2gray(I); %将彩色图变成灰色图
J. 请问C语言读取图像转换为二维数组程序有什么问题,怎么修改
FileName=fileDlg.GetFileName ();FILE *fp=fopen(FileName,"rb");//二进制读方式打开指定的图像文件fread(&FileHead, sizeof(BITMAPFILEHEADER), 1,fp); //读取文件头,文件指针自动后移fread(&InfoHead, sizeof(BITMAPINFOHEADER), 1,fp);//读取信息头,文件指针自动后移//获取图像宽、高、每像素所占位数等信息bmpWidth = InfoHead.biWidth;bmpHeight = InfoHead.biHeight;//下面完成图像数据向内存数组的存储ImageData=new unsigned char*[bmpHeight];if(InfoHead.biBitCount==24){for (int i=0;i<bmpHeight;i++){ImageData[i]=new unsigned char[(bmpWidth*3+3)/4*4];}for (int k=0;k<bmpHeight;k++ ){for(int j=0;j<(bmpWidth*3+3)/4*4;j++){fread(&ImageData[k][j],1,1,fp);//上面完成动态二维数组的申请,这里实际读取图像数据}}fclose(fp);//关闭文件