二、图像处理

news/2024/7/21 7:27:58 标签: 图像处理

待完善

一、图片缩放

import org.bytedeco.opencv.global.opencv_imgcodecs;
import org.bytedeco.opencv.global.opencv_imgproc;
import org.bytedeco.opencv.opencv_core.Mat;
import org.bytedeco.opencv.opencv_core.Size;

public class ImageResizer {

    public static void main(String[] args) {
        // 加载图片
        Mat image = opencv_imgcodecs.imread("E://app/images/222.jpg");
		// 创建Mat
        Mat resizedImage = new Mat();
        // 设置缩放大小
        Size size = new Size(100, 100);
        // 缩放图片, 参数分别是 原图片、新创建的mat、缩放大小
        opencv_imgproc.resize(image, resizedImage, size);
        // 写图片
        opencv_imgcodecs.imwrite("E://app/images/resized.jpg", resizedImage);

    }
}

二、图片旋转

import org.bytedeco.opencv.global.opencv_imgcodecs;
import org.bytedeco.opencv.global.opencv_imgproc;
import org.bytedeco.opencv.opencv_core.Mat;
import org.bytedeco.opencv.opencv_core.Point2f;

public class ImageResizer {

    public static void main(String[] args) {
        // 加载图片
        Mat image = opencv_imgcodecs.imread("E://app/images/222.jpg");
        Mat rotatedImage = new Mat();

        double angle = 90.0;
        // 获取图片中心点
        Point2f center = new Point2f(image.cols() / 2, image.rows() / 2);
        // 三个参数: 中心点,旋转角度, 图片比例
        Mat rotationMatrix = opencv_imgproc.getRotationMatrix2D(center, angle, 1.0);
        // 旋转
        opencv_imgproc.warpAffine(image, rotatedImage, rotationMatrix, image.size());
	    // 写图片
        opencv_imgcodecs.imwrite("E://app/images/rotated3.jpg", rotatedImage);
    }
}

三、边缘检测

import org.bytedeco.opencv.global.opencv_imgcodecs;
import org.bytedeco.opencv.global.opencv_imgproc;
import org.bytedeco.opencv.opencv_core.Mat;

public class ImageResizer {

    public static void main(String[] args) {
        // 加载图片
        Mat image = opencv_imgcodecs.imread("E://app/images/222.jpg");
        Mat grayImage = new Mat();
        Mat cannyImage = new Mat();
		// 灰度设置
        opencv_imgproc.cvtColor(image, grayImage, opencv_imgproc.COLOR_BGR2GRAY);
        // 边缘检测
        opencv_imgproc.Canny(grayImage, cannyImage, 100, 200);

        opencv_imgcodecs.imwrite("E://app/images/edges.jpg", grayImage);
        opencv_imgcodecs.imwrite("E://app/images/edges33.jpg", cannyImage);
    }
}

在这里插入图片描述

四、图像腐蚀

import org.bytedeco.opencv.global.opencv_imgcodecs;
import org.bytedeco.opencv.global.opencv_imgproc;
import org.bytedeco.opencv.opencv_core.Mat;
import org.bytedeco.opencv.opencv_core.Size;

public class ImageResizer {

    public static void main(String[] args) {
        // 加载图片
        Mat image = opencv_imgcodecs.imread("E://app/images/222.jpg");
        Mat grayImage = new Mat();
        // 腐蚀程度
        Mat element = opencv_imgproc.getStructuringElement(opencv_imgproc.MORPH_RECT, new Size(15, 15));
        // 腐蚀
        opencv_imgproc.erode(image, grayImage, element);
        opencv_imgcodecs.imwrite("E://app/images/eroded.jpg", grayImage);

    }
}

在这里插入图片描述

五、图像膨胀

import org.bytedeco.javacv.Java2DFrameConverter;
import org.bytedeco.javacv.OpenCVFrameConverter;
import org.bytedeco.opencv.global.opencv_imgproc;
import org.bytedeco.opencv.opencv_core.Mat;
import org.bytedeco.opencv.opencv_core.Size;

import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;

public class ImageResizer {


    public static void main(String[] args) {
        try {
            // 加载图像
            BufferedImage img = ImageIO.read(new File("E://app/images/222.jpg"));
            Java2DFrameConverter java2DFrameConverter = new Java2DFrameConverter();
            Mat inputMat = new OpenCVFrameConverter.ToMat().convert(java2DFrameConverter.convert(img));
            // 定义核
            Mat kernel = opencv_imgproc.getStructuringElement(opencv_imgproc.MORPH_RECT, new Size(15, 15));
            // 膨胀操作
            Mat outputMat = new Mat();
            opencv_imgproc.dilate(inputMat, outputMat, kernel);
            // 保存图像
            Java2DFrameConverter java2DFrameConverterOutput = new Java2DFrameConverter();
            BufferedImage outputImg = java2DFrameConverterOutput
            					.convert(new OpenCVFrameConverter.ToMat().convert(outputMat));
            ImageIO.write(outputImg, "png", new File("E://app/images/output.png"));
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

六、裁剪图片

public class ImageResizer {


    public static void main(String[] args) {

        // 读取图像
        Mat src = opencv_imgcodecs.imread("E://app/images/111.jpg");

        // 定义矩形区域
        Rect roi = new Rect(200, 100, 500, 500);
        Rect roi2 = new Rect(100, 100, 500, 500);
        // 裁剪图像
        Mat cropped = new Mat(src, roi);
        Mat cropped2 = new Mat(src, roi2);
        // 保存图像
        opencv_imgcodecs.imwrite("E://app/images/output444.png", cropped);
        opencv_imgcodecs.imwrite("E://app/images/output555.png", cropped2);
    }
}

在这里插入图片描述

七、翻转图像

import org.bytedeco.opencv.global.opencv_core;
import org.bytedeco.opencv.global.opencv_imgcodecs;
import org.bytedeco.opencv.opencv_core.Mat;

public class ImageResizer {


    public static void main(String[] args) {

        // 读取图像
        Mat src = opencv_imgcodecs.imread("E://app/images/222.jpg");
        // 翻转图像
        Mat dst = new Mat();
        opencv_core.flip(src, dst, 1);

        opencv_imgcodecs.imwrite("E://app/images/output555.png", dst);
    }
}

在这里插入图片描述

八、添加文字

import org.bytedeco.opencv.global.opencv_imgcodecs;
import org.bytedeco.opencv.global.opencv_imgproc;
import org.bytedeco.opencv.opencv_core.Mat;
import org.bytedeco.opencv.opencv_core.Point;
import org.bytedeco.opencv.opencv_core.Scalar;

import static org.bytedeco.opencv.global.opencv_imgproc.FONT_HERSHEY_DUPLEX;

public class ImageResizer {


    public static void main(String[] args) {

        // 读取图像
        Mat image1 = opencv_imgcodecs.imread("E://app/images/111.jpg");
        // 设置文字内容和位置
        String text = "Hello, World!";
        Point textOrg = new Point(50, 50);

        // 在图像上添加文字
        //img – 显示文字所在图像.
        //text – 待显示的文字.
        //org – 文字在图像中的左下角 坐标.
        // fontFace – 字体类型, 可选择字体:FONT_HERSHEY_SIMPLEX, FONT_HERSHEY_PLAIN, FONT_HERSHEY_DUPLEX,FONT_HERSHEY_COMPLEX, FONT_HERSHEY_TRIPLEX, FONT_HERSHEY_COMPLEX_SMALL, FONT_HERSHEY_SCRIPT_SIMPLEX, orFONT_HERSHEY_SCRIPT_COMPLEX,以上所有类型都可以配合 FONT_HERSHEY_ITALIC使用,产生斜体效果。
        //fontScale – 字体大小,该值和字体内置大小相乘得到字体大小
        //color – 文本颜色(默认颜色存储通道为BGR)
        //thickness – 写字的线的粗细,类似于0.38的笔尖和0.5的笔尖
        // lineType – 线性.
        // boo
        opencv_imgproc.putText(image1, text, textOrg, FONT_HERSHEY_DUPLEX, 2.0, new Scalar(250), 1,8, false);
        // 保存带有文字的图像
        opencv_imgcodecs.imwrite("E://app/images/output.png", image1);

    }
}

九、添加水印

import org.bytedeco.opencv.global.opencv_core;
import org.bytedeco.opencv.global.opencv_imgcodecs;
import org.bytedeco.opencv.global.opencv_imgproc;
import org.bytedeco.opencv.opencv_core.Mat;
import org.bytedeco.opencv.opencv_core.Size;

public class ImageResizer {


    public static void main(String[] args) {

        // 读取图像
        Mat image = opencv_imgcodecs.imread("E://app/images/111.jpg");
        // 读取水印图像
        Mat watermark = opencv_imgcodecs.imread("E://app/images/666.jpg");
        
        Size size = new Size(1000, 1000);
        // 两张图片大小必须一致
        Mat resizedImage = new Mat();
        Mat waterResizedImage = new Mat();
        opencv_imgproc.resize(image, resizedImage, size);
        opencv_imgproc.resize(watermark, waterResizedImage, size);

        // 将水印图像复制到原始图像上
        Mat image_with_watermark = new Mat();
        opencv_core.addWeighted(resizedImage, 0.7, waterResizedImage, 0.3, 0, image_with_watermark);
        // 保存带有文字的图像
        opencv_imgcodecs.imwrite("E://app/images/output.png", image_with_watermark);

    }
}

十、模糊

import org.bytedeco.opencv.global.opencv_core;
import org.bytedeco.opencv.global.opencv_imgcodecs;
import org.bytedeco.opencv.global.opencv_imgproc;
import org.bytedeco.opencv.opencv_core.Mat;
import org.bytedeco.opencv.opencv_core.Size;


public class ImageResizer {
    
    public static void main(String[] args) {
        // 读取图像
        Mat image = opencv_imgcodecs.imread("E://app/images/222.jpg");
        Mat dst = new Mat();
        opencv_imgproc.GaussianBlur(image, dst, new Size(15, 15), 0, 0, opencv_core.BORDER_DEFAULT);
        // 保存带有文字的图像
        opencv_imgcodecs.imwrite("E://app/images/output.jpg", dst);
    }
}

十一、锐化

import org.bytedeco.opencv.global.opencv_core;
import org.bytedeco.opencv.global.opencv_imgcodecs;
import org.bytedeco.opencv.global.opencv_imgproc;
import org.bytedeco.opencv.opencv_core.Mat;
import org.bytedeco.opencv.opencv_core.Size;


public class ImageResizer {

    public static void main(String[] args) {
        // 读取图像
        Mat image = opencv_imgcodecs.imread("E://app/images/222.jpg");
        Mat dst = new Mat();

        Mat sharpen = new Mat();

        opencv_imgproc.GaussianBlur(image, sharpen, new Size(0, 0), 3);
        opencv_core.addWeighted(image, 1.5, sharpen, -0.5, 0, dst);
        // 保存带有文字的图像
        opencv_imgcodecs.imwrite("E://app/images/output.jpg", dst);
    }
}

十二、颜色

import org.bytedeco.opencv.global.opencv_imgcodecs;
import org.bytedeco.opencv.global.opencv_imgproc;
import org.bytedeco.opencv.opencv_core.Mat;


public class ImageResizer {

    public static void main(String[] args) {
        // 读取图像
        Mat image = opencv_imgcodecs.imread("E://app/images/222.jpg");
        Mat dst = new Mat();

        opencv_imgproc.cvtColor(image, dst, opencv_imgproc.COLOR_RGB2XYZ);
        // 保存带有文字的图像
        opencv_imgcodecs.imwrite("E://app/images/output.jpg", dst);
    }
}


http://www.niftyadmin.cn/n/5075738.html

相关文章

监控搭建-Prometheus

监控搭建-Prometheus 1、背景2、目标3、选型4、Prometheus4.1、介绍4.2、架构4.3、构件4.4、运行机制4.5、环境介绍4.6、数据准备4.7、网络策略4.7.1、主机端口放行4.7.2、设备端口放行 4.8、部署4.9、验证4.10、配置 1、背景 随着项目信息化进程的推进,操作系统、…

leetcode 70.爬楼梯、322.零钱兑换、279.完全平方数

70. 爬楼梯(进阶版) 假设你正在爬楼梯。需要 n 阶你才能到达楼顶。 每次你可以爬 1 或 2 个或m个(m<n)台阶。你有多少种不同的方法可以爬到楼顶呢&#xff1f; 示例 1&#xff1a; 输入&#xff1a;n 2 输出&#xff1a;2 解释&#xff1a;有两种方法可以爬到楼顶。 1. …

好看的水滴登录页面

css 如何绘制水滴 可以通过box-shadow 来显示阴影可以通过border-radius 改变水滴的形状当然如果像要使其更加灵活&#xff0c;可以使用animationkeyframes关键帧border-radius&#xff0c;让水滴动起来 是不是很简单 来吧展示效果 html代码&#xff0c;就只有一个div,然后使…

【轻松玩转MacOS】更新升级篇

引言 我们都知道&#xff0c;一个运行良好的操作系统就像是一台高速运转的机器。而操作系统的更新和升级&#xff0c;就像是给这台机器进行定期的维护和检查。通过更新和升级&#xff0c;我们可以获得新的功能&#xff0c;修复已知的问题&#xff0c;甚至提高系统的性能和稳定…

【APP】上架指南:iOS App Store 首次上架被拒原因分析与解决方案

目录 一、前言 二、APP 审核备案新规 &#xff08;1&#xff09;iOS 上架审核申请被拒 &#xff08;2&#xff09;苹果应用商店重大调整 &#xff08;3&#xff09;首次备案流程 ① 阿里云备案 ② 华为云备案 ③ 腾讯云备案 三、iOS 首次上架拒审原因分析 &#…

OpenAI更新不会代码也可进行模型微调

OpenAI已经更新了他们的微调功能&#xff0c;提供了一个直观的用户界面&#xff0c;使用户能够在不编写任何代码的情况下进行模型的微调。 01 通过微调截图可以看到 1. Fine-tuning&#xff1a;这是微调功能的主页面。您可以看到选项卡&#xff0c;如"All", &quo…

(8)SpringMVC中的视图类型及其特点,以及视图控制器view-controller的配置

SpringMVC的视图 转发和重定向的区别及其原理,参考文章 视图类型及特点 视图的作用就是将Model中的数据渲染到页面上并展示给用户,SpringMVC中视图对应的View接口有三种实现类对应三种视图解析器 默认有转发视图InternalResourceView和重定向视图RedirectView以及Thymeleaf…

vc课堂发票

在这个页面 在控制台中执行&#xff1a; // 获取需要存储的元素值 var 销货单位名称 document.querySelector("body > section > div.table_middle > table > tbody > tr:nth-child(5) >td:nth-child(2) > ul > li:nth-child(1) > span"…