二、图像处理

待完善

一、图片缩放

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");// 创建MatMat 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 – 线性.// booopencv_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.hqwc.cn/news/128858.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【单片机】15-AD和DA转换

1.AD转换及其相关背景知识 1.基本概念 1.什么是AD转换? A(A,analog,模拟的,D,digital,数字的) 现实世界是模拟的,连续分布的,无法被分成有限份;…

android studio 、JDK环境变量配置

1、adb.exe环境变量配置: 打开控制面板 >系统和安全>系统>高级系统设置 在系统变量中新建ANDROID_HOME变量,赋值路径:D:\install\androidSDK 在系统变量path中添加:%ANDROID_HOME%\platform-tools 校验是…

vue3+vite+uniapp 封装一个省市区组件

一、预览图 二、使用前的一些注意事项 只支持在 uniapp vue3 项目中使用支持微信小程序和h5 (app端没有测试过)ui库用的 uview-plus省市区数据用的是 vant-ui 提供的一个赖库 vant/area-data 三、组件代码 <template><u-popup :show"show" type"botto…

旅游网站HTML

代码 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>旅游网</title> </head> <body><!--采用table编辑--> <!--最晚曾table,用于整个页面那布局--><table width&q…

【FPGA零基础学习之旅#14】串口发送字符串

&#x1f389;欢迎来到FPGA专栏~串口发送字符串 ☆* o(≧▽≦)o *☆嗨~我是小夏与酒&#x1f379; ✨博客主页&#xff1a;小夏与酒的博客 &#x1f388;该系列文章专栏&#xff1a;FPGA学习之旅 文章作者技术和水平有限&#xff0c;如果文中出现错误&#xff0c;希望大家能指正…

asp.net闲置物品购物网系统VS开发sqlserver数据库web结构c#编程Microsoft Visual Studio

一、源码特点 asp.net闲置物品购物网系统是一套完善的web设计管理系统&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。开发环境为vs2010&#xff0c;数据库为sqlserver2008&#xff0c;使用c#语 言开发 asp.net 闲置物品购物网 二、功…

Euclid空间or欧式空间(定义、正交性、正交变换、对称变换)酉空间(定义、酉变换、Hermite变换、正规矩阵)

欧式空间的定义 ​​​​​例如&#xff1a; 再例如&#xff1a; 正交性 正交基与标准正交基 施密特正交化例题 正交变换与正交矩阵 ​​​​​​​对称变换与对称矩阵 正交变换与对称变换例题 酉空间介绍 ​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​…

游戏软件开发与应用软件开发有什么不同呢?

游戏软件开发和应用软件开发是两种不同类型的软件开发&#xff0c;它们在许多方面都有不同之处。以下是它们之间的一些主要区别&#xff1a; 目标用户群体&#xff1a; 游戏软件开发的主要目标是提供娱乐和休闲体验&#xff0c;通常面向广大的游戏玩家群体。游戏软件的设计和开…

lua 中文字符的判断简介

一般在工作中会遇到中文字符的判断、截断、打码等需求&#xff0c;之前一直没有总结&#xff0c;虽然网上资料也多&#xff0c;今天在这里简单的总结一下。 1 .UTF-8简单描述 UTF-8 是 Unicode 的实现方式之一&#xff0c;其对应关系&#xff08;编码规则&#xff09;如下表所…

提高网站性能的10种方法:加速用户体验和降低服务器负担

在今天的数字时代&#xff0c;网站性能对于吸引和保留用户至关重要。一个快速加载的网站不仅提供更好的用户体验&#xff0c;还有助于降低服务器负担。以下是10种提高网站性能的方法&#xff0c;旨在加速页面加载速度和减少服务器的工作负荷。 压缩网页资源 利用压缩算法如gzi…

位移贴图和法线贴图的区别

位移贴图和法线贴图都是用于增强模型表面细节和真实感的纹理贴图技术&#xff0c;但是它们之间也存在着差异。 1、什么是位移贴图 位移贴图&#xff1a;位移贴图通过在模型顶点上定义位移值来改变模型表面的形状。该贴图包含了每个像素的高度值信息&#xff0c;使得模型的细节…

electron之进程间通信

Electron进程间通信 使用electron编写程序时经常遇到下面这种场景&#xff1a; 当用户点击一个按钮时&#xff0c;需要将页面输入的信息保存到本地电脑上&#xff1b; 或者是点击菜单时&#xff0c;需要页面窗口做出响应。 用户点击的按钮和窗口展示的内容是运行在渲染进程中&…