图像转灰
一幅完整的图像,是由红色、绿色、蓝色三个通道组成的。红色、绿色、蓝色三个通道的缩览图都是以灰度显示的。用不同的灰度色阶来表示“ 红,绿,蓝”在图像中的比重。通道中的纯白,代表了该色光在此处为最高亮度,亮度级别是255。
通道是整个Photoshop显示图像的基础。色彩的变动,实际上就是间接在对通道灰度图进行调整。通道是Photoshop处理图像的核心部分,所有的色彩调整工具都是围绕在这个核心周围使用的。
在计算机领域中,这类图像通常显示为从最暗黑色到最亮的白色的灰度,尽管理论上这个采样可以任何颜色的不同深浅,甚至可以是不同亮度上的不同颜色。灰度图像与黑白图像不同,在计算机图像领域中黑白图像只有黑色与白色两种颜色;灰度图像在黑色与白色之间还有许多级的颜色深度。但是,在数字图像领域之外,“黑白图像”也表示“灰度图像”,例如灰度的照片通常叫做“黑白照片”。在一些关于数字图像的文章中单色图像等同于灰度图像,在另外一些文章中又等同于黑白图像。
开发工具:eclipse、opencv.
准备工作:安装eclipse、下载opencv安装包,将其配置在eclipse中。
配置方法可参照官网:
图像转灰的方法是对图像像素值进行操作,将三通道三个像素各不相同的分量值赋值成相同的值,就实现了灰度变换。
灰度变换的方法有好几种:
1.浮点算法:Gray=R0.3+G0.59+B0.11
2.整数方法:Gray=(R30+G59+B11)/100
3.移位方法:Gray =(R76+G151+B*28)>>8;
4.平均值法:Gray=(R+G+B)/3;
5.仅取绿色:Gray=G;
本文采用的是第四种方法,代码如下:
package com;
//转灰
import org.opencv.core.Core;
import org.opencv.core.Mat;
import org.opencv.imgcodecs.Imgcodecs;
public class ToGray {
static {System.loadLibrary(Core.NATIVE_LIBRARY_NAME);};
public ToGray() {
Mat source = Imgcodecs.imread("E://image//111.jpg");//读图片
Mat dst = toGray(source);//调用转灰方法将结果保存在dst中
Imgcodecs.imwrite("E://image//toGray1.jpg", dst);//将dst中的图片存在指定位置显示
}
Mat toGray(Mat source) {
Mat dst = new Mat(source.size(), source.type());//获取图片的大小和类型
for(int j = 0;j < source.height();j++) {
for(int i = 0;i < source.width();i++) {
double[] tmp = source.get(j, i);//获取图片像素值,注意这里的tmp是数组,存放的是该点rgb各分量值
for(int k = 0;k < tmp.length;k++) {
tmp[k] = (tmp[0]+tmp[1]+tmp[2])/3;//转灰,取三通道像素值和的平均值
}
dst.put(j, i, tmp);//将每一点的tmp值覆盖原来该点的像素值
}
}
return dst;
}
public static void main(String[] args) {
new ToGray();
}
}