Java OpenCV 图像处理41 图形图像 图片缩放

Java OpenCV 图像处理41 图形图像 图片缩放

  • 1 图片缩放
  • 2 仿射变换
  • 3 透视变换

1 图片缩放

Java OpenCV 代码
OpenCV 提供的主要图像缩放函数,可以指定缩放比例或者目标尺寸。

Imgproc.resize(src, dst, new Size(width, height), fx, fy, interpolation);
Imgproc.resize 参数解释
src原图像。
dst输出图像。
Size(width, height)目标尺寸。如果指定了这个参数,fx 和 fy 将被忽略。
fx水平方向的缩放比例。
fy垂直方向的缩放比例。
interpolation插值方法。
interpolation 参数解释
Imgproc.INTER_NEAREST最近邻插值。
Imgproc.INTER_LINEAR双线性插值(默认)。
Imgproc.INTER_AREA使用像素区域关系进行重采样,通常用于缩小图像。
Imgproc.INTER_CUBIC4x4像素邻域的双三次插值。
Imgproc.INTER_LANCZOS48x8像素邻域的 Lanczos 插值。
package com.xu.opencv.image;import java.io.File;import org.opencv.core.Mat;
import org.opencv.core.Size;
import org.opencv.highgui.HighGui;
import org.opencv.imgcodecs.Imgcodecs;
import org.opencv.imgproc.Imgproc;/*** @author hyacinth*/
public class ImageResize {static {String os = System.getProperty("os.name");String type = System.getProperty("sun.arch.data.model");if (os.toUpperCase().contains("WINDOWS")) {File lib;if (type.endsWith("64")) {lib = new File("lib\\opencv\\x64\\" + System.mapLibraryName("opencv_java490"));} else {lib = new File("lib\\opencv\\x86\\" + System.mapLibraryName("opencv_java490"));}System.load(lib.getAbsolutePath());}}public static void main(String[] args) {String path = "C:\\Users\\xuyq\\Desktop\\2.jpg";resize1(path);}public static void resize1(String path) {Mat src = Imgcodecs.imread(path);Mat dst = new Mat();// 定义目标图像的尺寸Size size = new Size(300, 300);// 使用双线性插值进行缩放Imgproc.resize(src, dst, size, 0, 0, Imgproc.INTER_LINEAR);HighGui.imshow("src", src);HighGui.imshow("dst", dst);HighGui.waitKey();}}

resize

2 仿射变换

Java OpenCV 代码
通过仿射变换矩阵进行缩放,可以同时进行旋转、平移等操作。

Mat affineMatrix = Imgproc.getAffineTransform(srcPoints, dstPoints);
Imgproc.warpAffine(src, dst, affineMatrix, new Size(width, height));
Imgproc.getAffineTransform 参数解释
srcPoints原图像中的三个点。
dstPoints目标图像中的三个点。
package com.xu.opencv.image;import java.io.File;import org.opencv.core.Mat;
import org.opencv.core.MatOfPoint2f;
import org.opencv.core.Point;
import org.opencv.core.Size;
import org.opencv.highgui.HighGui;
import org.opencv.imgcodecs.Imgcodecs;
import org.opencv.imgproc.Imgproc;/*** @author hyacinth*/
public class ImageResize {static {String os = System.getProperty("os.name");String type = System.getProperty("sun.arch.data.model");if (os.toUpperCase().contains("WINDOWS")) {File lib;if (type.endsWith("64")) {lib = new File("lib\\opencv\\x64\\" + System.mapLibraryName("opencv_java490"));} else {lib = new File("lib\\opencv\\x86\\" + System.mapLibraryName("opencv_java490"));}System.load(lib.getAbsolutePath());}}public static void main(String[] args) {String path = "C:\\Users\\xuyq\\Desktop\\2.jpg";resize2(path);}public static void resize2(String path) {Mat src = Imgcodecs.imread(path);Mat dst = new Mat();// 定义原图像中的三个点Point[] srcPoints = {new Point(0, 0), new Point(src.cols() - 1, 0), new Point(0, src.rows() - 1)};// 定义目标图像中的三个点Point[] dstPoints = {new Point(0, src.rows() * 0.33), new Point(src.cols() * 0.85, src.rows() * 0.25), new Point(src.cols() * 0.15, src.rows() * 0.7)};// 将源点数组转换为 MatOfPoint2fMatOfPoint2f srcMat = new MatOfPoint2f(srcPoints);// 将目标点数组转换为 MatOfPoint2fMatOfPoint2f dstMat = new MatOfPoint2f(dstPoints);// 计算仿射变换矩阵Mat affineMatrix = Imgproc.getAffineTransform(srcMat, dstMat);// 应用仿射变换Imgproc.warpAffine(src, dst, affineMatrix, new Size(src.cols(), src.rows()));HighGui.imshow("src", src);HighGui.imshow("dst", dst);HighGui.waitKey();}}

在这里插入图片描述

3 透视变换

Java OpenCV 代码
用于更复杂的变换,包括缩放和透视校正。

Mat perspectiveMatrix = Imgproc.getPerspectiveTransform(srcPoints, dstPoints);
Imgproc.warpPerspective(src, dst, perspectiveMatrix, new Size(width, height));
Imgproc.getPerspectiveTransform 参数解释
srcPoints原图像中的四个点。
dstPoints目标图像中的四个点。
package com.xu.opencv.image;import java.io.File;import org.opencv.core.Mat;
import org.opencv.core.MatOfPoint2f;
import org.opencv.core.Point;
import org.opencv.core.Size;
import org.opencv.highgui.HighGui;
import org.opencv.imgcodecs.Imgcodecs;
import org.opencv.imgproc.Imgproc;/*** @author hyacinth*/
public class ImageResize {static {String os = System.getProperty("os.name");String type = System.getProperty("sun.arch.data.model");if (os.toUpperCase().contains("WINDOWS")) {File lib;if (type.endsWith("64")) {lib = new File("lib\\opencv\\x64\\" + System.mapLibraryName("opencv_java490"));} else {lib = new File("lib\\opencv\\x86\\" + System.mapLibraryName("opencv_java490"));}System.load(lib.getAbsolutePath());}}public static void main(String[] args) {String path = "C:\\Users\\xuyq\\Desktop\\2.jpg";resize3(path);}public static void resize3(String path) {Mat src = Imgcodecs.imread(path);Mat dst = new Mat();// 定义原图像中的四个点Point[] srcPoints = {new Point(0, 0), new Point(src.cols() - 1, 0), new Point(src.cols() - 1, src.rows() - 1), new Point(0, src.rows() - 1)};// 定义目标图像中的四个点Point[] dstPoints = {new Point(src.cols() * 0.05, src.rows() * 0.33), new Point(src.cols() * 0.9, src.rows() * 0.25), new Point(src.cols() * 0.8, src.rows() * 0.9), new Point(src.cols() * 0.2, src.rows() * 0.7)};// 将源点数组转换为 MatOfPoint2fMatOfPoint2f srcMat = new MatOfPoint2f(srcPoints);// 将目标点数组转换为 MatOfPoint2fMatOfPoint2f dstMat = new MatOfPoint2f(dstPoints);// 计算透视变换矩阵Mat perspectiveMatrix = Imgproc.getPerspectiveTransform(srcMat, dstMat);// 应用透视变换Imgproc.warpPerspective(src, dst, perspectiveMatrix, new Size(src.cols(), src.rows()));HighGui.imshow("src", src);HighGui.imshow("dst", dst);HighGui.waitKey();}}

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/876215.shtml

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

相关文章

科学又省力 宠物浮毛怎么去掉便捷高效?除毛秘籍养宠空气净化器

上次和朋友逛完街去她家,她家的猫哈基米一开门就飞奔过来,朋友直接抱起它狂亲。结果,猫毛和汗水粘得到处都是,手臂上、脸上都是,看得我这鼻炎星人直起鸡皮疙瘩。很多养宠物的朋友都说,天天给猫狗梳毛&#…

ProcessExplorer免费且功能强大的进程管理软件

ProcessExplorer是一款功能强大的进程管理软件,由Sysinternals开发,并被微软收购。它不仅可以管理和监控系统中的进程,还提供了许多实用的功能,如CPU和内存使用情况的曲线图表、DLL和句柄查看、进程冻结等。 安装ProcessExplorer…

微服务安全——OAuth2.1详解、授权码模式、SpringAuthorizationServer实战、SSO单点登录、Gateway整合OAuth2

文章目录 Spring Authorization Server介绍OAuth2.0协议介绍角色OAuth2.0协议的运行流程应用场景授权模式详解客户端模式密码模式授权码模式简化模式token刷新模式 OAuth 2.1 协议介绍授权码模式PKCE扩展设备授权码模式拓展授权模式 OpenID Connect 1.0协议Spring Authorizatio…

Axious的请求与响应

Axious的请求与响应 1.什么是Axious Axious是一个开源的可以用在浏览器和Node.js的异步通信框架,它的主要作用就是实现AJAX异步通信,其功能特点如下: 从浏览器中创建XMLHttpRequests ~从node.js创建Http请求 支持PromiseAPI 拦截请求和…

电信应用的振荡器基础知识

数字通信的最基本组成部分是同步。同步有很多方面。在数字传输中,同步是通过管理跨节点的平均传输和接收速率来管理无错误的传输和接收。在蜂窝通信中,同步使用户设备在移动中以及从一个小区移动到另一个小区时能够可靠地工作。在 5G 等先进网络中&#…

为什么w 和 b成同比例变化对超平面没有影响

文章目录 解释可视化证明数乘角度进行解释可视化代码领取 解释 在机器学习中,特别是支持向量机(SVM)和线性回归等模型中,参数 w w w和 b b b分别代表权重向量和偏置项。当说 w w w和 b b b成规模变化对超平面没有影响时&#xff…

pikachu靶场之目录遍历、敏感信息泄露

一、目录遍历 漏洞概述 在web功能设计中,很多时候我们会要将需要访问的文件定义成变量,从而让前端的功能便的更加灵活。 当用户发起一个前端的请求时,便会将请求的这个文件的值(比如文件名称)传递到后台,后台再执行其对应的文件。 在这个过…

邮件攻击案例系列二:冒充合作伙伴伪造发票商务邮件诈骗

案例描述 2023 年 11 月下旬,某知名外贸公司财务人员收到一封来自境外合作伙伴的邮件,说明有一张发票即将于 11 月 29 日到期的,希望该外贸公司能尽快付款。 该邮件有两个附件,一个附件是即将到期发票的电子版,一个附…

PHP8.3.9安装记录,Phpmyadmin访问提示缺少mysqli

ubuntu 22.0.4 腾讯云主机 下载好依赖 sudo apt update sudo apt install -y build-essential libxml2-dev libssl-dev libcurl4-openssl-dev pkg-config libbz2-dev libreadline-dev libicu-dev libsqlite3-dev libwebp-dev 下载php8.3.9安装包 nullhttps://www.php.net/d…

stable diffusion+LangChain+LLM自动生成图片

最近都在研究和学习stable diffusion和langchain的相关知识,并且看到stable diffusion也是有类似于ChatGLM的api调用方式,那在想有没有可能将stable diffusion也集成到langchain中来呢?看到网上资料比较多的是可以借助chatgpt来辅助stable di…

深度学习的前沿主题:GANs、自监督学习和Transformer模型

💎 欢迎大家互三:2的n次方_ 💎1. 介绍 深度学习在人工智能领域中占据了重要地位,特别是生成对抗网络(GANs)、自监督学习和Transformer模型的出现,推动了图像生成、自然语言处理等多个领域的创…

【计算机网络】DHCP实验

一:实验目的 1:深入理解DHCP(动态主机配置协议)的工作原理和数据包交换过程。 2:掌握如何通过命令行释放和重新获取IP地址,并通过抓包软件分析DHCP消息的具体内容。 二:实验仪器设备及软件 硬…

什么是死锁,原子性

20240727 一、什么是死锁原子性 一、什么是死锁 原子性

CentOS7下操作iptables防火墙和firewalld防火墙

CentOS7下操作iptables防火墙和firewalld防火墙 💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、…

小程序的运营方法:从入门到精通

随着科技的快速发展,小程序已成为我们日常生活和工作中不可或缺的一部分。小程序无需下载安装,即用即走的特点深受用户喜爱。那么,如何运营好一个小程序呢?下面就为大家分享一些小程序的运营方法。 一、明确目标用户 在运营小程序…

学习硬件测试01:串口下载+结构体封装说明+程序框架思想+程序框架的搭建+硬件测试程序(P42~P46)

一、串口下载 1.1引入 串口下载就是说用串口来烧录 STM32 的程序。 原因:当调试口(SWD)因为IO口没有设置好等原因被锁定而使用不了时,就需要用串口来更新程序。 1.2如何通过串口烧录程序? 1、选择串口&#xff1a…

轻松上手的订单管理系统推荐

本文精选了十款订单管理利器:纷享销客、Zoho CRM、简道云ERP、易订货、盘古云ERP、Cin7 Core、畅捷通T、Salesforce Commerce Cloud、NetSuite、浪潮GS。 市场上有各种各样的订单管理系统,每个看起来功能强大,但到底哪个最适合你的业务需求呢…

mysql的MHA以及故障模拟

目录 MHA概念 MHA的组件 MHA的特点 实验:搭建完成MHA的架构 实验:主备切换 实验结果 实验:故障切换 实验:故障恢复 MHA概念 MHA:高可用模式下的故障切换,基于主从复制。它解决的是单点故障和主从复…

C语言笔记36 •双链表•

1.双向链表的结构 Ps:这⾥的“带头”跟前⾯说的“头节点”是两个概念,实际前⾯的在单链表阶段称呼不严谨,但是为了我们更好的理解就直接称为单链表的头节点。带头链表⾥的头节点,实际为“哨兵位”,哨兵位节点不存储任何…

《Redis设计与实现》读书笔记-一条命令执行过程

目录 最近在重读《Redis设计与实现》这本书,通过记录笔记,整理知识体系,希望我的笔记分享,能对致力于不断学习的你有点用。 1. 命令请求的执行过程概述 2.1 发送命令请求 2.2 读取命令请求 2.3命令执行(1&#xf…