图像处理原理
本文以显示本地图片为例讲解图像处理的基本原理。要导入本地图片需要使用IO输入/输出接口。通过IO接口可以实现外部数据与程序内存之间的数据传输。我们将使用javax.imageio包中的ImageIO工具类来完成这一操作。首先需要创建可视化界面基于JFrame类创建JPanel面板并添加原图和灰度两个功能按钮。package Pixel;import javax.swing.*;import java.awt.*;public class PixelUI{publicvoidinitUI(){JFrame jfnewJFrame();jf.setTitle(图像处理);jf.setSize(900,900);jf.setLocationRelativeTo(null);jf.setDefaultCloseOperation(3);jf.setLayout(newFlowLayout());JPanel panelnewJPanel();//创建按钮面板JButton jbunewJButton(原图);panel.add(jbu);//按钮添加进JPanel面板JButton graynewJButton(灰度);panel.add(gray);jf.add(panel);//按钮面板添加进JFramejf.setVisible(true);Graphics gjf.getGraphics();//监听器PixelListener listenernewPixelListener();jbu.addActionListener(listener);//按钮添加监听器listener.gg;gray.addActionListener(listener);}publicstaticvoidmain(String[]args){PixelUI uinewPixelUI();ui.initUI();}}创建PixelListener类定义public Graphics g属性用于与PixelUI类交互。先考虑实现本地图片显示功能通过File对象传递图片路径。String pathE:\\IdeaProjects\\Java02\\src\\Pixel\\比尔盖茨.png;File filenewFile(path);//传递图片接着定义数组读取图片内容int[][]pixelArrgetImagePixel(file);//读取drawPixel(greyArr);//绘制原图先通过二维数组获得图片内容两层for循环遍历图片的高和宽这里用到RGB三原色的定义bufferdImag.getRGB(j,i)返回int类型数值占32位二进制。三原色中每个元素的区间是八位二进制0-255对应十六进制 0x00~0xFF。对应颜色右移即可显示对应颜色范围但是右移高位补1要想不影响结果用按位与运算符0xFF。如图publicint[][]getImagePixel(File file){BufferedImage bufferdImagenull;try{bufferdImageImageIO.read(file);}catch(IOException e){throw newRuntimeException(e);}//根据图片大小定义二维数组存图片像素数intwbufferdImage.getWidth();inthbufferdImage.getHeight();int[][]pixelArrnewint[h][w];for(inti0;ih;i){for(intj0;jw;j){intrgbbufferdImage.getRGB(j,i);pixelArr[i][j]rgb;}}returnpixelArr;}写drawPixel图片绘制逻辑原理是绘制每个单像素点还原像素点需左移回getImagePixel中右移的位数。再将像素值转化为Color对象传给画笔进行绘制。publicvoiddrawPixel(int[][]pixelArr){for(inti0;ipixelArr.length;i){for(intj0;jpixelArr[0].length;j){intrgbpixelArr[i][j];//取RGB三原色intredrgb160xFF;intgreenrgb80xFF;intbluergb0XFF;//传画笔Color colornewColor(red,green,blue);g.setColor(color);g.drawLine(j,i,j,i);//绘制像素点}}}至于灰度功能另建一方法getgrey传入pixelArr原图参数。根据存原图数组大小确定灰度数组空间。两层for循环遍历高宽计算出三原色后取平均值。publicint[][]getgrey(int[][]pixelArr){inthpixelArr.length;intwpixelArr[0].length;int[][]greyArrnewint[h][w];for(inti0;ih;i){for(intj0;jw;j){intrgbpixelArr[i][j];intredrgb160xFF;intgreenrgb80xFF;intbluergb0XFF;intgrey(redgreenblue)/3;greyArr[i][j]grey;}}returngreyArr;}以下为效果展示本文涵盖了监听器绑定、面板创建、类对象与变量交互、RGB显示原理以及IO接口应用等内容更好地认识了面向对象程序编程。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2424025.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!