当前位置: 首页 > news >正文

图像处理原理

本文以显示本地图片为例,讲解图像处理的基本原理。

要导入本地图片,需要使用IO(输入/输出)接口。通过IO接口可以实现外部数据与程序内存之间的数据传输。我们将使用javax.imageio包中的ImageIO工具类来完成这一操作。

首先需要创建可视化界面:基于JFrame类创建JPanel面板,并添加"原图"和"灰度"两个功能按钮。

package Pixel;import javax.swing.*;import java.awt.*;public class PixelUI{publicvoidinitUI(){JFrame jf=newJFrame();jf.setTitle("图像处理");jf.setSize(900,900);jf.setLocationRelativeTo(null);jf.setDefaultCloseOperation(3);jf.setLayout(newFlowLayout());JPanel panel=newJPanel();//创建按钮面板JButton jbu=newJButton("原图");panel.add(jbu);//按钮添加进JPanel面板JButton gray=newJButton("灰度");panel.add(gray);jf.add(panel);//按钮面板添加进JFramejf.setVisible(true);Graphics g=jf.getGraphics();//监听器PixelListener listener=newPixelListener();jbu.addActionListener(listener);//按钮添加监听器listener.g=g;gray.addActionListener(listener);}publicstaticvoidmain(String[]args){PixelUI ui=newPixelUI();ui.initUI();}}

创建PixelListener类,定义public Graphics g属性用于与PixelUI类交互。先考虑实现本地图片显示功能,通过File对象传递图片路径。

String path="E:\\IdeaProjects\\Java02\\src\\Pixel\\比尔盖茨.png";File file=newFile(path);//传递图片

接着定义数组读取图片内容:

int[][]pixelArr=getImagePixel(file);//读取drawPixel(greyArr);//绘制原图

先通过二维数组获得图片内容,两层for循环遍历图片的高和宽,这里用到RGB三原色的定义,bufferdImag.getRGB(j,i)返回int类型数值(占32位二进制)。三原色中每个元素的区间是八位二进制0-255,对应十六进制 0x00~0xFF。对应颜色右移即可显示对应颜色范围,但是右移,高位补1,要想不影响结果,用按位与运算符&0xFF。如图:

publicint[][]getImagePixel(File file){BufferedImage bufferdImage=null;try{bufferdImage=ImageIO.read(file);}catch(IOException e){throw newRuntimeException(e);}//根据图片大小定义二维数组存图片像素数intw=bufferdImage.getWidth();inth=bufferdImage.getHeight();int[][]pixelArr=newint[h][w];for(inti=0;i<h;i++){for(intj=0;j<w;j++){intrgb=bufferdImage.getRGB(j,i);pixelArr[i][j]=rgb;}}returnpixelArr;}

写drawPixel图片绘制逻辑:原理是绘制每个单像素点,还原像素点,需左移回getImagePixel()中右移的位数。再将像素值转化为Color对象,传给画笔进行绘制。

publicvoiddrawPixel(int[][]pixelArr){for(inti=0;i<pixelArr.length;i++){for(intj=0;j<pixelArr[0].length;j++){intrgb=pixelArr[i][j];//取RGB三原色intred=rgb>>16&0xFF;intgreen=rgb>>8&0xFF;intblue=rgb&0XFF;//传画笔Color color=newColor(red,green,blue);g.setColor(color);g.drawLine(j,i,j,i);//绘制像素点}}}

至于灰度功能,另建一方法getgrey,传入pixelArr原图参数。根据存原图数组大小确定灰度数组空间。两层for循环遍历高宽,计算出三原色后,取平均值。

publicint[][]getgrey(int[][]pixelArr){inth=pixelArr.length;intw=pixelArr[0].length;int[][]greyArr=newint[h][w];for(inti=0;i<h;i++){for(intj=0;j<w;j++){intrgb=pixelArr[i][j];intred=rgb>>16&0xFF;intgreen=rgb>>8&0xFF;intblue=rgb&0XFF;intgrey=(red+green+blue)/3;greyArr[i][j]=grey;}}returngreyArr;}

以下为效果展示:

本文涵盖了监听器绑定、面板创建、类对象与变量交互、RGB显示原理以及IO接口应用等内容,更好地认识了面向对象程序编程。

http://www.jsqmd.com/news/497601/

相关文章:

  • 2026西南金刚砂地坪材料厂家推荐榜附本地地址:环氧地坪双包施工、环氧地坪施工队、环氧地坪材料哪家好、环氧地坪材料生产选择指南 - 优质品牌商家
  • AI Agent在企业架构领域应用研究
  • 论文AI率飙高?这10款降AI率工具亲测有效,轻松搞定论文检测!
  • java并发
  • 手持终端PDA怎么选?一篇讲清核心要点与实用推荐 - 企业推荐官【官方】
  • python-flask大学生家教管理系统
  • 关于@overload装饰器的几点理解
  • 运维转行网络安全:从优势切入,6-12个月实战转型指南
  • 一次生成、无限复用:易元 AI 双引擎重构生产逻辑,AI 混剪素材复用让内容越做越省
  • Autodesk Maya
  • 【AI Agent 学习笔记 task1】Day2:初识智能体
  • SpringBoot实现文件上传和下载
  • 上海小程序定制公司推荐:如何避开低价陷阱选对家
  • 2026农机橡塑配件推荐榜:排种器/排种盒/排种管/播种机塑料件/播种机尼龙件/播种机有机肥排肥装置/播种机有机肥施肥装置/选择指南 - 优质品牌商家
  • 大模型AI-入门-发展历程-机器学习
  • 上海新锐品牌Lifenias:用酸枣百合滴鸡精拯救睡眠 - 中媒介
  • 测试结果验证测试:无限递归的俄罗斯套娃
  • 链表_必会面试题2
  • 数据库安全最后一公里:金仓SQL防火墙如何填平开发留下的注入坑
  • 1391、STM32单片机智能语音识别分类垃圾桶 超声波检测溢满报警 语音播报垃圾分类(程序+原理图+PCB文件+proteus仿真+参考论文+开题报告+原理图文字讲解+程序流程图+硬件框图+器件清单
  • 「龙虾」来了!OpenClaw如何掀起AI智能体革命
  • 东华复试day17
  • 挺黑色幽默的笑话
  • python-flask导师选择分配管理系统 _0spy6
  • 基于LangChain的RAG与Agent智能体开发 - OpenAI库介绍和使用
  • 四川大学团队破解“万能图像修复“难题
  • AOP相关面试题
  • 提示系统SQL优化从慢到快:架构师用提示工程实现查询响应速度提升10倍
  • 英集芯IP2391N支持低功耗Boost充电的微光能量收集芯片
  • PCB抄板技术全流程解析