`

利用ImageJ将验证码去噪、二值。图片切割

 
阅读更多
public static void main(String[] args) throws FileNotFoundException, IOException
	{
		String savepath = "D:\\myworkspace\\Ftp\\csdn\\44.bmp";
		
		//打开图片
		IJ.open("D:\\myworkspace\\Ftp\\csdn\\4.bmp");   
		
		//设置大小
		//IJ.run("Size...", "width=30 height=30 constrain interpolate");
		
		//去噪
		//IJ.run("Remove Outliers...", "radius=2 threshold=50 which=Dark");
		IJ.run("Despeckle");
		
		//二值
		IJ.run("Make Binary");
		

		
		//另存图片
		IJ.save(savepath);
		
		//读取另存图片
		BufferedImage img = ImageIO.read(new FileInputStream(savepath));
		
		//切割
		BufferedImage[] bimg = cutter(img);
		
		for(int i = 0; i < bimg.length; i++)
		{
			if(bimg[i] != null)
				ImageIO.write(bimg[i], "BMP", new File("D:\\myworkspace\\Ftp\\checkCode\\" + (i+1) + ".bmp"));
		}
	}
	
	/**
	 * 切割图片(对于数据不重叠有效)
	 * @param img
	 * @return
	 * @throws IOException 
	 */
	public static BufferedImage[] cutter(BufferedImage image) throws IOException
	{
		BufferedImage checkCode[] = null;
        int height = image.getHeight();
        int width = image.getWidth();
        
        List<List<Integer>> all = new ArrayList<List<Integer>>();
        List<Integer> tmp = null;
        
        //纵向扫描
        for(int w = 0; w < width - 0; w++)
        {
        	int h = 0;
        	for(; h < height - 0; h++)
        	{
        		int px = image.getRGB(w, h);
        		
        		//System.out.print(px == -1 ? "-" : "0");
        		//如果遇到非白	色,则记录该y值的值
        		if(px != -1)
        		{
        			if(tmp == null)
                	{
                		tmp = new ArrayList<Integer>();
                	}
        			
        			tmp.add(w);
        			break;
        		}
        	}
        	//如果tmp有记录值,并且上一次扫描中纵向没有任何颜色,那么将记录加入all并截段重计
        	//或者最后一个数据超过边框
        	if((tmp != null && (h == height)) || (w == (width - 1)))
        	{
        		all.add(tmp);
        		tmp = null;
        	}
        	//System.out.println();
        }
        
        checkCode = new BufferedImage[all.size()];
        
        for(int i = 0; i < all.size(); i++)
        {
        	List<Integer> list = all.get(i);
        	
        	if(list == null) continue;
        	
        	//开始y轴
        	int yStart = list.get(0);
        	//结束y轴
        	int yEnd = list.get(list.size() - 1);
        	
        	System.out.println(yStart + "," + yEnd);
        	
        	//截取开始与结束的记录
        	BufferedImage bimg = image.getSubimage(yStart, 0, yEnd - yStart, height);
        	
        	checkCode[i] = bimg;
        }
        
		return checkCode;
	}
分享到:
评论

相关推荐

    基于ImageJ和OpenCv的16种自动二值化图像代码(C++)

    本项目着重讲解如何利用ImageJ的Java代码和OpenCV库在C++环境下实现16种不同的自动二值化算法,以达到对图像进行高效处理的目的。 首先,我们要理解ImageJ和OpenCV这两个库在图像处理中的作用。ImageJ是一款开源的...

    ImageJ图像处理软件(win-64位)

    ImageJ是一款广泛应用于生物医学、材料科学、物理学等多个领域的开源图像处理软件,尤其在生命科学领域,它被用来分析和...通过熟练掌握和利用ImageJ,我们可以对图像数据进行深入挖掘,揭示隐藏在图像背后的科学信息。

    imageJ二次开发资料(中文)

    这份"imageJ二次开发资料(中文)"正好提供了这方面的重要资源。 ImageJ的二次开发主要包括以下几个方面: 1. **编写插件**:ImageJ支持Java插件,开发者可以通过编写Java代码实现新的功能。这些插件可以增强Image...

    [ImageJ] ImageJ 图片处理教程 英文版

    [Packt Publishing] ImageJ 图片处理教程 英文版 [Packt Publishing] Image Processing with ImageJ E Book ☆ 图书概要:☆ Discover the incredible possibilities of ImageJ from basic image processing to...

    ImageJ 查看RAW图像工具

    本文将详细介绍如何使用ImageJ来查看和处理RAW图像。 RAW图像文件的特点在于其保留了传感器捕捉到的所有原始信息,包括色彩深度、曝光、白平衡等,这些信息在JPEG或其他压缩格式中可能会丢失。因此,RAW图像提供更...

    使用python PIL库实现简单验证码的去噪方法步骤

    - 二值化处理:使用点操作`point()`函数将图像转换为二值图像。 示例代码: ```python from PIL import Image def binaryzation(image_path, threshold=140): # 打开灰度图像 image = Image.open(image_path)....

    JAVA ImageJ 支持图片格式转换,图片放大缩小等,功能非常强大,缩略图高清晰,有实例代码

    这个压缩包提供的资源能够帮助开发者利用ImageJ进行图片处理,包括格式转换、图片的放大与缩小,以及创建高清晰度的缩略图。 1. **ImageJ的基本功能**: - **格式转换**:ImageJ支持多种图像格式的读取和写入,如...

    ImageJ用户手册中文版

    尽管ImageJ1在1997年就已经开发,而且仍在活跃开发中,但目前所说的ImageJ通常指的是ImageJ2,它对ImageJ1进行了完全重写,便于二次开发,同时保持了对ImageJ1的兼容性。Fiji是ImageJ的一个综合发行版,除了包含...

    材料表征软件:ImageJ二次开发-1.绪论:ImageJ及其二次开发的概述

    材料表征软件:ImageJ二次开发_1.绪论:ImageJ及其二次开发的概述.docx 材料表征软件:ImageJ二次开发_10.插件开发实践:特征提取.docx 材料表征软件:ImageJ二次开发_11.插件开发实践:图像分析.docx 材料表征软件...

    ImageJ_ImageJ_imagej灰度分析_

    2. **灰度阈值**:利用ImageJ的阈值功能,科研人员可以将图像分割为前景和背景,这在细胞计数、物体分割等任务中非常有用。用户可以根据直方图选择合适的灰度阈值,以达到最佳的分割效果。 3. **灰度测量**:ImageJ...

    ImageJ-Mac版本

    此外,还有平滑、锐化、阈值分割等工具,方便用户进行图像分割和二值化处理。 3. **测量和分析**:ImageJ能够精确测量图像中的长度、面积、角度等几何参数,并可计算像素强度的统计分布。这对于科研实验数据分析...

    ASI_MTF-master_sold7n8_knifeedge_ImageJ_MTF计算、IMAGEJ_MTF_

    在ImageJ中,可以利用内置的频谱分析工具结合特定的MTF插件来执行这种分析。 **应用与实践** 使用ImageJ的MTF计算插件,用户可以进行以下操作: 1. **性能测试**:评估镜头、相机或其他光学组件的性能,比如...

    ImageJ-Windows版本

    在Windows平台上,ImageJ与64位Java 8捆绑在一起,这确保了软件能够充分利用现代计算机的高性能计算能力,处理更大更复杂的图像数据。 ImageJ的核心功能包括图像打开、查看、编辑、分析、转换和测量等。它支持多种...

    九宫格验证码图片分割源码

    3. **二值化**:将灰度图像转换为黑白图像,便于后续的分割。可以设定一个阈值,像素值高于此阈值的设为白色,低于的设为黑色。使用threshold()函数: ```python binary_image = gray_image.threshold([230]) ``` 4....

    ImageJ使用教程

    本教程将深入探讨如何使用ImageJ进行电泳条带灰度比的分析,帮助你更好地理解和掌握该工具的强大功能。 首先,了解ImageJ的基础操作至关重要。打开ImageJ后,你可以通过"File"菜单导入你需要分析的电泳图片。确保...

    java图像处理方法:灰度化,二值化,降噪,切割,裁剪,找相似等

    二值化是将图像转换为只有黑白两种颜色的过程,通常用于文字识别或简单的图像分割。在Java中,我们可以设定一个阈值,像素值高于这个阈值的变为白色,低于则变为黑色。这可以通过比较每个像素的灰度值与阈值,然后...

    Imagej源码

    11. **并发和性能优化**:由于处理大型图像可能需要大量计算,ImageJ利用Java的多线程特性进行性能优化,理解并发编程概念有助于深入源码。 12. **版本控制系统**:ImageJ源码通常托管在版本控制系统如Git上,通过...

    ImageJ图像识别软件

    ImageJ是一款广泛应用于生物医学领域的开源图像处理软件,它的强大功能和灵活性使其在科研和教育中备受推崇。...下载提供的ImageJ压缩包,你将获得这款软件的完整安装文件,开始探索图像处理的无限可能吧。

    ImageJ.rar

    ImageJ提供了一整套强大的图像分析工具,它能够处理各种格式的图片,包括灰度、彩色、二值图像等。对于生物实验来说,这款软件尤其适用于对显微镜图片的分析,例如细胞计数、组织结构观察、蛋白质表达检测等。 1. *...

Global site tag (gtag.js) - Google Analytics