图像裁减算法

2024-03-23 12:48
文章标签 算法 图像 裁减

本文主要是介绍图像裁减算法,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

package org.mingyuan;

import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;

import javax.imageio.*;

public class GetImageFormats {
    /**
    * 图片裁减方法
    * 原理:将图片像素级隔行裁减,保证灰度不变,尺寸变为原来的1/4
    * @throws IOException
    */
    public static void ImageCut() throws IOException{
        BufferedImage source = ImageIO.read(new File("c:/复件 20071211194815077801.jpg"));//读取要处理的图片
        int width = source.getWidth();//获得图片的宽度
        int height = source.getHeight();//获得图片的高度
        BufferedImage target = new BufferedImage(width, height,
                BufferedImage.TYPE_3BYTE_BGR);//生成一个新图片
        boolean flag = true;//访问标志,true表示访问,false则跳过
        /**
        *裁减列 其中flag的作用是裁减开关,当flag为true时,进行复制
        * 当flag为false是放弃当前访问的列,转到下一列,这样保证了隔行复制
        * x:原始图片横坐标
        * y:原始图片纵坐标
        * i:新图片横坐标
        * j:新图片纵坐标
        */
        for (int x = 0, i = 0; x < width; x++) {//对列进行循环,同时对新图片的纵坐标也进行初始化,因为第一列是保留的,所以在此初始化
            if (flag) {//如果flag为true,那么处理这列
                for (int y = 0, j = 0; y < height; y++,j++) {//对原始图片的行进行操作,同时处理新图片的行
                    target.setRGB(i, j, source.getRGB(x, y));//取得原始图片的RGB值,并赋予新图片。第一个参数是新图的横坐标,第二个参数是新图的总坐标,第三个参数取得(x,y)处的RGB值
                }
                flag = false;// 访问之后将flag置为false,保证下一列不被处理(可以将下一列抛弃)
                i++;//i只在flag为true时加1
            } else {
                flag = true;// 若flag为false,则说明当前列被放弃,所以将flag置为true保证下一列被处理
            }
        }

        File outFile = new File("c:/a.PNG");//生成输出的文件,但这时候没有输出图像信息
        ImageIO.write(target, "PNG", outFile);//把缓存的图像信息输出到outFile这个文件中
        source = ImageIO.read(outFile);//以新的图片作为处理源,使之成为原始图片
        target = new BufferedImage(width, height, BufferedImage.TYPE_3BYTE_BGR);//生成新的缓冲图片
        flag = true;//访问标志,true表示访问,false则跳过
        /**
        *裁减行 其中flag的作用是裁减开关,当flag为true时,进行复制
        * 当flag为false是放弃当前访问的行,转到下一行,这样保证了隔行复制
        * x:原始图片横坐标
        * y:原始图片纵坐标
        * i:新图片横坐标
        * j:新图片纵坐标
        */
        for (int y = 0, j = 0; y < height; y++) {//对行进行循环,同时初始化总坐标
            if (flag) {//如果flag为true,那么处理这行
                for (int x = 0, i = 0; x < width; x++,i++) {//对原始图片的列进行操作,同时处理新图片的列
                    target.setRGB(i, j, source.getRGB(x, y));取得原始图片的RGB值,并赋予新图片。第一个参数是新图的横坐标,第二个参数是新图的总坐标,第三个参数取得(x,y)处的RGB值
                }
                flag = false; 访问之后将flag置为false,保证下一行不被处理(可以将下一行抛弃)
                j++;//j只在flag为true时加1
            } else {
                flag = true;// 若flag为false,则说明当前行被放弃,所以将flag置为true保证下一行被处理
            }

        }
        ImageIO.write(target, "PNG", new File("c:/b.PNG"));//讲结果写入新文件中
    }
    /**
    *
    * @param args
    * @throws IOException
    */
    public static void main(String[] args) throws IOException {
        ImageCut();
    }
}

这篇关于图像裁减算法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/838354

相关文章

Java中的雪花算法Snowflake解析与实践技巧

《Java中的雪花算法Snowflake解析与实践技巧》本文解析了雪花算法的原理、Java实现及生产实践,涵盖ID结构、位运算技巧、时钟回拨处理、WorkerId分配等关键点,并探讨了百度UidGen... 目录一、雪花算法核心原理1.1 算法起源1.2 ID结构详解1.3 核心特性二、Java实现解析2.

Python中OpenCV与Matplotlib的图像操作入门指南

《Python中OpenCV与Matplotlib的图像操作入门指南》:本文主要介绍Python中OpenCV与Matplotlib的图像操作指南,本文通过实例代码给大家介绍的非常详细,对大家的学... 目录一、环境准备二、图像的基本操作1. 图像读取、显示与保存 使用OpenCV操作2. 像素级操作3.

C/C++的OpenCV 进行图像梯度提取的几种实现

《C/C++的OpenCV进行图像梯度提取的几种实现》本文主要介绍了C/C++的OpenCV进行图像梯度提取的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的... 目录预www.chinasem.cn备知识1. 图像加载与预处理2. Sobel 算子计算 X 和 Y

c/c++的opencv图像金字塔缩放实现

《c/c++的opencv图像金字塔缩放实现》本文主要介绍了c/c++的opencv图像金字塔缩放实现,通过对原始图像进行连续的下采样或上采样操作,生成一系列不同分辨率的图像,具有一定的参考价值,感兴... 目录图像金字塔简介图像下采样 (cv::pyrDown)图像上采样 (cv::pyrUp)C++ O

使用雪花算法产生id导致前端精度缺失问题解决方案

《使用雪花算法产生id导致前端精度缺失问题解决方案》雪花算法由Twitter提出,设计目的是生成唯一的、递增的ID,下面:本文主要介绍使用雪花算法产生id导致前端精度缺失问题的解决方案,文中通过代... 目录一、问题根源二、解决方案1. 全局配置Jackson序列化规则2. 实体类必须使用Long封装类3.

Python+wxPython构建图像编辑器

《Python+wxPython构建图像编辑器》图像编辑应用是学习GUI编程和图像处理的绝佳项目,本教程中,我们将使用wxPython,一个跨平台的PythonGUI工具包,构建一个简单的... 目录引言环境设置创建主窗口加载和显示图像实现绘制工具矩形绘制箭头绘制文字绘制临时绘制处理缩放和旋转缩放旋转保存编

Springboot实现推荐系统的协同过滤算法

《Springboot实现推荐系统的协同过滤算法》协同过滤算法是一种在推荐系统中广泛使用的算法,用于预测用户对物品(如商品、电影、音乐等)的偏好,从而实现个性化推荐,下面给大家介绍Springboot... 目录前言基本原理 算法分类 计算方法应用场景 代码实现 前言协同过滤算法(Collaborativ

python+OpenCV反投影图像的实现示例详解

《python+OpenCV反投影图像的实现示例详解》:本文主要介绍python+OpenCV反投影图像的实现示例详解,本文通过实例代码图文并茂的形式给大家介绍的非常详细,感兴趣的朋友一起看看吧... 目录一、前言二、什么是反投影图像三、反投影图像的概念四、反向投影的工作原理一、利用反向投影backproj

使用Python实现图像LBP特征提取的操作方法

《使用Python实现图像LBP特征提取的操作方法》LBP特征叫做局部二值模式,常用于纹理特征提取,并在纹理分类中具有较强的区分能力,本文给大家介绍了如何使用Python实现图像LBP特征提取的操作方... 目录一、LBP特征介绍二、LBP特征描述三、一些改进版本的LBP1.圆形LBP算子2.旋转不变的LB

openCV中KNN算法的实现

《openCV中KNN算法的实现》KNN算法是一种简单且常用的分类算法,本文主要介绍了openCV中KNN算法的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的... 目录KNN算法流程使用OpenCV实现KNNOpenCV 是一个开源的跨平台计算机视觉库,它提供了各