`

图像切割

阅读更多
  /** *//**
     * 图像切割
     * @param srcImageFile 源图像地址
     * @param descDir      切片目标文件夹
     * @param destWidth    目标切片宽度
     * @param destHeight   目标切片高度
     */
    public static void cut(String srcImageFile, String descDir, int destWidth, int destHeight)
    {
        try
        {
            Image img;
            ImageFilter cropFilter;
            // 读取源图像
            BufferedImage bi = ImageIO.read(new File(srcImageFile));
            int srcWidth = bi.getHeight(); // 源图宽度
            int srcHeight = bi.getWidth(); // 源图高度
            if (srcWidth > destWidth && srcHeight > destHeight)
            {
                Image image = bi.getScaledInstance(srcWidth, srcHeight, Image.SCALE_DEFAULT);
                destWidth = 200; // 切片宽度
                destHeight = 150; // 切片高度
                int cols = 0; // 切片横向数量
                int rows = 0; // 切片纵向数量
                // 计算切片的横向和纵向数量
                if (srcWidth % destWidth == 0)
                {
                    cols = srcWidth / destWidth;
                }
                else
                {
                    cols = (int) Math.floor(srcWidth / destWidth) + 1;
                }
                if (srcHeight % destHeight == 0)
                {
                    rows = srcHeight / destHeight;
                }
                else
                {
                    rows = (int) Math.floor(srcHeight / destHeight) + 1;
                }
                // 循环建立切片
                // 改进的想法:是否可用多线程加快切割速度
                for (int i = 0; i < rows; i++)
                {
                    for (int j = 0; j < cols; j++)
                    {
                        // 四个参数分别为图像起点坐标和宽高
                        // 即: CropImageFilter(int x,int y,int width,int height)
                        cropFilter = new CropImageFilter(j * 200, i * 150, destWidth, destHeight);
                        img = Toolkit.getDefaultToolkit(), .createImage(
                                        new FilteredImageSource(image.getSource(), cropFilter));
                        BufferedImage tag = new BufferedImage(destWidth, destHeight, BufferedImage.TYPE_INT_RGB);
                        Graphics g = tag.getGraphics();
                        g.drawImage(img, 0, 0, null); // 绘制缩小后的图
                        g.dispose();
                        // 输出为文件
                        ImageIO.write(tag, "JPEG", new File(descDir + "pre_map_" + i + "_" + j + ".jpg"));
                    }
                }
            }
        }
        catch (Exception e)
        {
            e.printStackTrace();
        }
    }
分享到:
评论

相关推荐

    数字图像处理图像分割源代码

    在数字图像处理领域,图像分割是一项关键的技术,它旨在将图像划分为多个有意义的区域或对象,以便于后续分析和理解。在这个特定的资源中,我们拥有的是使用C#编程语言编写的图像分割源代码,可以直接运行。下面将...

    数字图像处理实验报告-图像分割

    在数字图像处理领域,图像分割是一项至关重要的技术,它旨在将图像划分为多个具有不同特征的区域或对象,以便进一步分析、识别或提取有用信息。本实验报告将深入探讨三种图像分割方法:全局阈值分割、Otsu最优阈值...

    基于java的图像分割(数字图像处理)

    在图像处理领域,图像分割是一项核心的技术,它用于将图像划分为不同的区域或对象,以便进一步分析和理解图像内容。本项目是基于Java实现的图像分割算法,涉及到的知识点广泛,包括全局阈值分割、Roberts边缘检测...

    深度学习之图像分割数据集:卫星图像道路分割图像分割数据集(二值图像分割任务)

    项目包含卫星图像道路分割图像分割数据集(二值图像分割任务),文件以文件夹格式储存,可直接用作图像分割数据集,无需额外处理。 Road Challenge的DeepGlobe 道路分割数据集 数据集总大小:580MB 数据集介绍:...

    医学图像分割数据集:眼底血管分割【数据集(2分割)+类别标签+可视化代码】

    项目包含:眼底血管分割【数据集(2分割)+类别标签+可视化代码】 ...除此之外,包含一个图像分割的可视化脚本,随机提取一张图片,将其原始图片、GT图像、GT在原图蒙板的图像展示,并保存在当前目录下

    Mean_Shift 算法(图像分割)

    即先算出当前点的偏移均值,移动该点到其偏移均值,然后以此为新的起始点,继续移动,直到满足一定的条件结束.Comaniciu等人[3][4]把Mean Shift成功的运用的特征空间的分析,在图像平滑和图像分割中Mean Shift都得到了很...

    用c++程序实现图像分割

    基于图论的图像分割技术是近年来国际上图像分割领域的一个新的研究热点。该方法将图像映射为带权无向图,把像素视作节点。利用最小剪切准则得到图像的最佳分割 该方法本质上将图像分割问题转化为最优化问题。是一种...

    图像分割—图像处理到图像分析的关键步骤

    图像分割是计算机视觉领域中的一个核心任务,它在图像处理到图像分析的转化过程中起着承上启下的关键作用。图像分割就是将图像分成多个具有特定属性或意义的区域,这些区域可以是单一对象或者环境背景,使得我们可以...

    基于SVM的图像分割-真彩色图像分割_基于SVM的图像分割-真彩色图像分割_图像分割_图像分割

    在图像处理领域,分割是至关重要的一步,它旨在将图像中的不同对象或区域区分开来。支持向量机(Support Vector Machine, SVM)作为一种强大的机器学习算法,已经被广泛应用于图像分割任务,特别是在真彩色图像分割...

    图像分割开题报告

    【图像分割】是图像处理中的核心任务,旨在将图像分解为多个互不重叠的区域,每个区域具有相似的特性。图像分割对于图像分析、识别和理解至关重要,它为特征提取和测量提供基础,影响后续处理的效果。自20世纪70年代...

    图像分割,图像分割算法,matlab

    图像分割是计算机视觉领域中的一个核心任务,它涉及到将一幅图像划分为多个有意义的区域或对象,以便于后续分析和理解。在这个项目中,我们主要关注的是基于MATLAB的图像分割算法,特别是最大化类间方差阈值分割方法...

    手动彩色分割.zip_ROI_matlab_roi图像分割_图像分割_手动分割

    在本资源"手动彩色分割.zip"中,我们探讨的是如何使用MATLAB进行ROI的图像分割,特别是手动指定的图像分割方法。这种方法属于半自动图像分割,即用户需要通过手动操作来指定感兴趣区域的边界,然后程序将根据这些...

    数字图像处理 图像分割

    在数字图像处理领域,图像分割是一项至关重要的技术,它旨在将图像划分为多个具有不同特征的区域或对象,以便进一步分析、识别或理解图像内容。在这个VC++6.0编程环境中,我们可以利用图像处理库和算法来实现图像...

    数字图像处理 图像分割程序 分水岭分割 prewitt算子

    本程序的目的是将一幅医学图像CT.bmp进行图像分割,以达到目视时更有效的观察各个区域的效果。 本程序是在windows xp系统下,使用Visual Studio 2008编程工具编写,编程语言C++。 可以直接点击“\源代码\Debug\...

    matlab_MATLAB代码实现_CT图像分割肺部实质_图像分割_

    在图像处理领域,CT(Computed Tomography)图像的分析与分割是重要的研究方向,尤其在医学影像诊断中,准确地分割肺部实质对于疾病的检测和治疗具有重要意义。本项目使用MATLAB作为编程环境,实现了一套针对CT图像...

    Ncut_9_ncut_图像分割_分割算法_

    4. **迭代细化**:对于复杂的图像,可能需要多次切割,形成多级分割,直到满足分割条件。 三、NCUT的优势 1. **稳定性**:NCUT算法对初始阈值不敏感,分割结果较为稳定。 2. **自适应性**:能够处理不同大小和形状...

    基于遗传算法的图像分割,基于遗传算法的图像分割研究,matlab

    在计算机视觉领域,图像分割是一项基础且重要的任务,它旨在将图像划分为多个具有相似特征的区域,以帮助我们理解和解析图像内容。本项目聚焦于一种利用遗传算法进行图像分割的方法,这是一种受到生物进化原理启发的...

    数字图像处理|Matlab-图像分割与边缘检测实验-采用阈值处理方法进行图像分割

    在图像处理领域,图像分割和边缘检测是两个关键步骤,对于理解和分析图像内容至关重要。本文主要探讨的是如何在Matlab环境中,通过阈值处理技术来实现图像分割,并结合边缘检测来提取图像的重要特征。 首先,我们要...

    MATLAB图像分割处理图

    在图像处理领域,MATLAB是一种广泛使用的工具,尤其在图像分割方面,其强大的函数库和易用性使得图像分析和处理变得更为便捷。图像分割是将图像分成具有不同特性的区域,是许多图像分析任务的基础,如目标检测、图像...

Global site tag (gtag.js) - Google Analytics