java 中如何获得灰度图像的像素值,getRGB和getRaster有什么区别

java 中如何获得灰度图像的像素值,getRGB和getRaster有什么区别,第1张

关于图像像素值,我想要先讲一下Java中如何组织一个图像对象BufferedImage的,

一个BufferedImage的像素数据储存在Raster中,ColorModel里面储存颜色空间,类型等

信息,当前Java只支持一下三种图像格式- JPG,PNG,GIF,如何向让Java支持其它格式,首

先要 完成Java中的图像读写接口,然后打成jar,加上启动参数- Xbootclasspath/p

newimageformatIOjar即可。

取得BufferedImage的代码如下:

File file = new File("D:\\test\\blue_flowerjpg");

BufferedImage image = ImageIOread(file);

取得像素使用getRGB,代码如下:

int type= imagegetType();

if ( type ==BufferedImageTYPE_INT_ARGB || type == BufferedImageTYPE_INT_RGB )

return (int [])imagegetRaster()getDataElements(x, y, width, height, pixels );

else

return imagegetRGB( x, y, width, height, pixels, 0, width );

写入像素,才可能用到getRaster,在type为ARGB 或RGB时,必须使用getRaster()setDataElements方式设置,其他格式直接setRGB,代码如下:

int type= imagegetType();

if ( type ==BufferedImageTYPE_INT_ARGB || type == BufferedImageTYPE_INT_RGB )

imagegetRaster()setDataElements(x, y, width, height, pixels );

else

imagesetRGB(x, y, width, height, pixels, 0, width );

1调用matlab的图像读取函数imread读,把放在work文件夹下

I = imread('样品jpg');

2变为灰度

G = rgb2gray(I);

3双击workspace中的G项,在d出的array edit中就看到了灰度矩阵

读入rgb图像——i=imread();

然后转换成灰度图像——i=rgb2gray(i);

计算均值——mean(mean(i));

计算方差——var();

opencv获取灰度图像的像素值的方法如下:

int main()

{    

   Mat img = imread("lenajpg");

   imshow("Lena Original", img);

   for (int row = 0; row < imgrows; row++)

   {

       for (int col = 0; col < imgcols; col++)

       {

           //主要是这里的代码

           if((imgdata + imgstep[0] row + imgstep[1] col + imgelemSize1() 2) > 128)

           {

               //[row, col]像素的第 1 通道地址被 解析(blue通道)

               (imgdata + imgstep[0] row + imgstep[1] col) = 255;

               //[row, col]像素的第 2 通道地址被 解析(green通道), 关于elemSize1函数的更多描述请见 Fn1 里所列的博文链接

               (imgdata + imgstep[0] row + imgstep[1] col + imgelemSize1()) = 255;

               //[row, col]像素的第 3 通道地址被 解析(red通道)

               (imgdata + imgstep[0] row + imgstep[1] col + imgelemSize1() 2) = 255;

           }

       }

   }

   imshow("Lena Modified", img);

   cvWaitKey();

   return 0;

}

输出:

用for循环遍历所有需要处理的文件即可。

如果文件的命名有规律(例如0001bmp, 0002bmp, ),可以用sprintf函数直接生成文件名;

如果不满足上述条件,但文件在集中存放某个文件夹中,可以用dir获取文件列表;

如果文件没有规律,存放的位置也比较乱,那就直接手写一个cell数组,用以指定要处理的文件列表。

楼上回答正确,其实还可用更为简单的方法,此为图像处理中的基础,举简例说明。\x0d\假设你需将名为face1bmp的彩色图转换为face2bmp的灰度图,代码如下:\x0d\imageName=strcat('face1bmp');%获取图像名称\x0d\I=imread(imageName);%读取彩色图像\x0d\J=rgb2gray(I);%转换为灰度图\x0d\figure(1);%窗口显示灰度图\x0d\imshow(J);\x0d\fname=strcat('face2bmp');\x0d\imwrite(J,fname);%保存为BMP格式的灰度图face2

以上就是关于java 中如何获得灰度图像的像素值,getRGB和getRaster有什么区别全部的内容,包括:java 中如何获得灰度图像的像素值,getRGB和getRaster有什么区别、怎么用matlab提取灰度值啊、如何利用matlab提取一幅图像的所有灰度值,并计算均值,方差,CV 值等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/9481166.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-28
下一篇2023-04-28

发表评论

登录后才能评论

评论列表(0条)

    保存