在c、c++或者python环境中可以使用opencv非常容易实现图像灰度、二值化、膨胀和腐蚀等功能;但在java环境中,使用opencv来处理相对比较麻烦,简单的操作用opencv处理也相对过重,这里记录下java版图片相关处理。

原图:

1、灰度图

public static void main(String[] args) throws Exception {File file = new File("test.png");BufferedImage image = ImageIO.read(file);BufferedImage bi = grayImage(image);ImageIO.write(bi, "jpg", new File("gray.jpg"));}public static BufferedImage grayImage(BufferedImage bufferedImage) {int width = bufferedImage.getWidth();int height = bufferedImage.getHeight();BufferedImage grayBufferedImage = new BufferedImage(width, height, bufferedImage.getType());for (int i = 0; i < bufferedImage.getWidth(); i++) {for (int j = 0; j < bufferedImage.getHeight(); j++) {final int color = bufferedImage.getRGB(i, j);final int r = (color >> 16) & 0xff;final int g = (color >> 8) & 0xff;final int b = color & 0xff;int gray = (int) (0.3 * r + 0.59 * g + 0.11 * b);int newPixel = colorToRGB(255, gray, gray, gray);grayBufferedImage.setRGB(i, j, newPixel);}}return grayBufferedImage;}private static int colorToRGB(int alpha, int red, int green, int blue) {int newPixel = 0;newPixel += alpha;newPixel = newPixel << 8;newPixel += red;newPixel = newPixel << 8;newPixel += green;newPixel = newPixel << 8;newPixel += blue;return newPixel;}

2、二值化

    bi = binaryImage(bi, 130);ImageIO.write(bi, "jpg", new File("binary.jpg"));public static BufferedImage binaryImage(BufferedImage image, int threshold) {int w = image.getWidth();int h = image.getHeight();int black = new Color(0, 0, 0).getRGB();int white = new Color(255, 255, 255).getRGB();BufferedImage bi = new BufferedImage(w, h, BufferedImage.TYPE_BYTE_BINARY);for (int x = 0; x < w; x++) {for (int y = 0; y < h; y++) {int rgb = image.getRGB(x, y);int gray = rgb & 0xff;if (gray < threshold) {bi.setRGB(x, y, black);} else {bi.setRGB(x, y, white);}}}return bi;}

3、膨胀腐蚀

    int[] kernel = new int[]{2, 2};bi = erode(bi, kernel);ImageIO.write(bi, "jpg", new File("erode.jpg"));public static BufferedImage erode(BufferedImage image, int[] kernel) {int black = new Color(0, 0, 0).getRGB();int white = new Color(255, 255, 255).getRGB();int w = image.getWidth();int h = image.getHeight();for (int x = 0; x < w; x++) {for (int y = 0; y < h; y++) {int min = 255;for (int i = x; i < x + kernel[0]; i++) {for (int j = y; j < y + kernel[1]; j++) {if (i >= 0 && i < w && j >= 0 && j < h) {int value = image.getRGB(i, j) & 0xff;if (value < min) {min = value;}}}}if (min == 255) {image.setRGB(x, y, white);} else {image.setRGB(x, y, black);}}}return image;}

图像灰度、二值化、膨胀和腐蚀(纯Java篇)相关推荐

  1. 2021-08-09 图像灰度二值化

    from PIL import Image import matplotlib.pyplot as plt import numpy as np# 获取图片 def getimg():return I ...

  2. cv2 inrange灰度图_基于openCV,PIL的深色多背景复杂验证码图像转灰度二值化,并去噪降噪处理分析...

    title: [python]基于openCV,PIL的深色多背景复杂验证码图像转灰度二值化,并去噪降噪处理分析 type: categories copyright: true categories ...

  3. opencv 轮廓放大_基于openCV,PIL的深色多背景复杂验证码图像转灰度二值化,并去噪降噪处理分析...

    title: [python]基于openCV,PIL的深色多背景复杂验证码图像转灰度二值化,并去噪降噪处理分析 type: categories copyright: true categories ...

  4. 图像的二值化和灰度化

                   图像的二值化是将图像上的像素点的灰度值设置为0或255,也就是将整个图像呈现出明显的黑白效果. 将256个亮度等级的灰度图像通过适当的阀值选取而获得仍然可以反映图像整体和 ...

  5. 《图形图像处理》— 使用matlab对图像进行二值化和灰度化处理

    用matlab对图像进行二值化处理 >>m = imread('d:\image\logo.jpg'); >> imshow(n); >> n = graythre ...

  6. 【图像处理】——图像的二值化操作及阈值化操作(固定阈值法(全局阈值法——大津法OTSU和三角法TRIANGLE)和自适应阈值法(局部阈值法——均值和高斯法))

    目录 一.二值化的概念(实际上就是一个阈值化操作) 1.概念: 2.实现方法 3.常用方法 二.阈值类型 1.常见阈值类型(主要有五种类型) (1)公式描述 (2)图表描述 2.两种特殊的阈值算法(O ...

  7. 图像的二值化原理和实现

    1.  图像的二值化的基本原理 图像的二值化处理就是讲图像上的点的灰度置为0或255,也就是讲整个图像呈现出明显的黑白效果.即将256个亮度等级的灰度图像通过适当的阀值选取而获得仍然可以反映图像整体和 ...

  8. 图像的二值化之python+opencv

    定义:图像的二值化,就是将图像上的像素点的灰度值设置为0或255,也就是将整个图像呈现出明显的只有黑和白的视觉效果. 一幅图像包括目标物体.背景还有噪声,要想从多值的数字图像中直接提取出目标物体,常用 ...

  9. 不均匀光照文本图像的二值化

    本文转载自:http://blog.csdn.net/u013162930/article/details/47755363 不均匀光照文本图像的二值化. 因为文本图像的背景是不均匀的,所以想先求出图 ...

  10. 多媒体实验 Visual Studio 图像显示与处理 对图像进行二值化、求边缘、增强等处理

    具体代码,图像处理结果,报告,请访问: 多媒体实验VisualStudio图像显示与处理对图像进行二值化.求边缘.增强等处理.zip-讲义文档类资源-CSDN文库 一.实验目的 1.掌握BMP文件格式 ...

最新文章

  1. php.ini来配置session,php.ini 配置session自动开启
  2. 关于思考写程序的意义
  3. Rails 3.1 CoffeeScript SASS初体验
  4. python取出满足条件的行_numpy ndarray 取出满足特定条件的某些行实例
  5. Mac鼠标增强软件Bettertouchtool
  6. canvas-画图改进版
  7. 超详细图文介绍,华为桌面云解决方案
  8. Spring Boot电商项目6:数据库设计与项目初始化一:数据库表设计;
  9. js实现的单机双人象棋演示及其分析
  10. 人机交互大作业文档预览
  11. Crazy Number
  12. Winxp不幸中毒以及手杀过程
  13. 我国三大运营商即将开始联手屏蔽垃圾短信
  14. 为什么阿里巴巴强制不要在 foreach 里执行删除操作
  15. 数学建模计算机配置,数学建模资源配置问题.doc
  16. 程序员的工资这么高,为什么还会有人离职?
  17. 上拉电阻、下拉电阻的理解
  18. Shipping Grants
  19. cyber physical system
  20. 从四大造字法看文字所承载的文化_汉字的四大造字法

热门文章

  1. Wi-Fi无线技术介绍
  2. chatgpt赋能python:Python程序员必知的Geany配置技巧
  3. 又一个有创意的新东东: 基于手势的遥控棒
  4. ASP.NET编写简单的中文分词程序
  5. 华为鸿蒙系统使用,对标Apple Watch!魅族推首款智能手表,官宣接入华为鸿蒙系统...
  6. 突发预警平台数据统计css3+html5模板
  7. Lifeograph 0.7.3发布 基于gtkmm的轻量电子日记本
  8. migrate oracle dell,How to Migrate Oracle to PostgreSQL
  9. 计算机基础知识 教学反思,《计算机应用基础》教学反思
  10. Python 查看文字编码