Java实现提取图片边缘的示例代码

 更新时间:2023年06月30日 16:13:52   作者:万能的小裴同学  
这篇文章主要为大家详细介绍了如何利用Java实现提取图片边缘的功能,文中的示例代码讲解详细,具有一定的学习价值,感兴趣的小伙伴可以了解一下

Java提取图片边缘

实现代码

package qrcodeServer;
import java.awt.Image;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import javax.imageio.ImageIO;
public class ServerMain {
	static final String rootpath="E:\\desktop\\";
	static final int Y=30;
	static boolean isboard(BufferedImage ash,int now_x,int now_y,int w,int h,int[][] kernel1,int[][] kernel2)
	{
		int tmp=kernel1.length/2;
		int x=now_x-tmp,y=now_y-tmp;
		int ken1=0,ken2=0;
		for(int i=x;i<x+kernel1.length;i++)
		{
			for(int j=y;j<y+kernel1.length;j++)
			{
				if(i<0||j<0||i>=w||j>=h)
				{
					return true;
				}
				ken1+=RGBtoAsh(ash.getRGB(i, j))*kernel1[i-x][j-y];
				ken2+=RGBtoAsh(ash.getRGB(i, j))*kernel2[i-x][j-y];
			}
		}
		ken1=ken1<0?-ken1:ken1;
		ken2=ken2<0?-ken2:ken2;
		return (ken1+ken2)/2>Y;
	}
	public static int RGBtoAsh(int rgb)
	{
		int tmp=0;
		for(int i=0;i<3;i++)
		{
			tmp+=(rgb>>(i*8))&0xFF;
		}
		return tmp/3;
	}
	public static int AshtoRGB(int ash)
	{
		int tmp=0xFF000000;
		for(int i=0;i<3;i++)
		{
			tmp|=(ash<<(i*8));
		}
		return tmp;
	}
	public static void main(String[] args) {
		try {
			BufferedImage bimg=ImageIO.read(new File(rootpath+"1.jpg"));
			int w=bimg.getWidth(),h=bimg.getHeight();
			BufferedImage bimgot=new BufferedImage(w, h, Image.SCALE_DEFAULT);
			BufferedImage tmp=new BufferedImage(w, h, Image.SCALE_DEFAULT);
			int kernel1[][]= {{1,1,1,1},
					{0,0,0,0},
					{0,0,0,0},
					{-1,-1,-1,-1}};
			int kernel2[][]= {{-1,0,0,1},
					{-1,0,0,1},
					{-1,0,0,1},
					{-1,0,0,1}
					};
			for(int i=0;i<bimg.getWidth();i++)
				for(int j=0;j<bimg.getHeight();j++)
				{
					if(isboard(bimg, i, j, w, h, kernel1,kernel2))
						bimgot.setRGB(i,j,0);
					else
						bimgot.setRGB(i,j,0xFFFFFFFF);
				}
			ImageIO.write(bimgot, "jpg",new File(rootpath+"out.jpg"));
		} catch (FileNotFoundException e) {
			// TODO 自动生成的 catch 块
			e.printStackTrace();
		} catch (IOException e) {
			// TODO 自动生成的 catch 块
			e.printStackTrace();
		}
	}
}

下面是效果演示

到此这篇关于Java实现提取图片边缘的示例代码的文章就介绍到这了,更多相关Java提取图片边缘内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • java拷贝指定目录下所有内容到minIO代码实例

    java拷贝指定目录下所有内容到minIO代码实例

    这篇文章主要介绍了java拷贝指定目录下所有内容到minIO代码实例,创建桶 直接使用工具类先判断,再创建即可,创建文件夹,需要注意以"/"结尾,实际也是在minIO上创建文件,只是作为目录的表现形式展示,需要的朋友可以参考下
    2024-01-01
  • 详解jenkins自动部署springboot应用的方法

    详解jenkins自动部署springboot应用的方法

    这篇文章主要介绍了详解jenkins自动部署springboot应用的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-08-08
  • java中JVM中如何存取数据和相关信息详解

    java中JVM中如何存取数据和相关信息详解

    这篇文章主要介绍了JVM中如何存取数据和相关信息详解,Java源代码文件(.java后缀)会被Java编译器编译为字节码文件,然后由JVM中的类加载器加载各个类的字节码文件,加载完毕之后,交由JVM执行引擎执行。JVM中怎么存取数据和相关信息呢?,需要的朋友可以参考下
    2019-06-06
  • java后端进行跨域的几种方式小结

    java后端进行跨域的几种方式小结

    本文主要介绍了java后端进行跨域的几种方式小结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-03-03
  • 解决mqtt接收中文乱码问题及排查过程

    解决mqtt接收中文乱码问题及排查过程

    MQTT协议不支持中文,可能导致乱码,为了解决问题,建议使用支持UTF-8编码的MQTT客户端,如emqt工具,并确保服务器端也正确处理中文编码,如有问题可参考emqt官网或相关文档
    2025-09-09
  • Spring Cloud负载均衡及远程调用实现详解

    Spring Cloud负载均衡及远程调用实现详解

    这篇文章主要介绍了Spring Cloud负载均衡及远程调用实现详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-08-08
  • Java静态内部类实现单例过程

    Java静态内部类实现单例过程

    这篇文章主要介绍了Java静态内部类实现单例过程,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-10-10
  • SpringBoot Web开发之系统任务启动与路径映射和框架整合

    SpringBoot Web开发之系统任务启动与路径映射和框架整合

    这篇文章主要介绍了SpringBoot Web开发中的系统任务启动与路径映射和Servlet、Filter、Listener框架整合,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-08-08
  • idea代码模板设置方式

    idea代码模板设置方式

    这篇文章主要介绍了idea代码模板设置方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-12-12
  • java实现简单中国象棋

    java实现简单中国象棋

    这篇文章主要为大家详细介绍了java实现简单中国象棋,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-05-05

最新评论