Kotlin Bytedeco OpenCV 图像图像57 图像ROI
Kotlin Bytedeco OpenCV 图像图像57 图像ROI
- 1 添加依赖
- 2 测试代码
- 3 测试结果
1 添加依赖
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns="http://maven.apache.org/POM/4.0.0"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.xu</groupId><artifactId>KotlinOpenCV</artifactId><version>1.0</version><properties><kotlin.version>2.0.0</kotlin.version><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><kotlin.code.style>official</kotlin.code.style><kotlin.compiler.jvmTarget>1.8</kotlin.compiler.jvmTarget></properties><repositories><repository><id>mavenCentral</id><url>https://repo1.maven.org/maven2/</url></repository></repositories><dependencies><dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>5.8.29</version></dependency><dependency><groupId>org.apache.commons</groupId><artifactId>commons-compress</artifactId><version>1.27.0</version></dependency><dependency><groupId>org.tukaani</groupId><artifactId>xz</artifactId><version>1.10</version></dependency><dependency><groupId>org.jetbrains.kotlinx</groupId><artifactId>kotlinx-coroutines-core</artifactId><version>1.9.0-RC</version></dependency><!-- <dependency>--><!-- <groupId>org.opencv</groupId>--><!-- <artifactId>opencv</artifactId>--><!-- <version>4100</version>--><!-- <scope>system</scope>--><!-- <systemPath>${project.basedir}/lib/opencv/opencv-4100.jar</systemPath>--><!-- </dependency>--><dependency><groupId>org.bytedeco</groupId><artifactId>opencv-platform</artifactId><version>4.10.0-1.5.11</version></dependency><!-- <dependency>--><!-- <groupId>org.bytedeco</groupId>--><!-- <artifactId>ffmpeg-platform</artifactId>--><!-- <version>6.1.1-1.5.10</version>--><!-- </dependency>--><dependency><groupId>org.jetbrains.kotlin</groupId><artifactId>kotlin-test-junit5</artifactId><version>2.0.0</version><scope>test</scope></dependency><dependency><groupId>org.junit.jupiter</groupId><artifactId>junit-jupiter</artifactId><version>5.10.0</version><scope>test</scope></dependency><dependency><groupId>org.jetbrains.kotlin</groupId><artifactId>kotlin-stdlib</artifactId><version>2.0.0</version></dependency></dependencies><build><sourceDirectory>src/main/kotlin</sourceDirectory><testSourceDirectory>src/test/kotlin</testSourceDirectory><plugins><plugin><groupId>org.jetbrains.kotlin</groupId><artifactId>kotlin-maven-plugin</artifactId><version>2.0.0</version><executions><execution><id>compile</id><phase>compile</phase><goals><goal>compile</goal></goals></execution><execution><id>test-compile</id><phase>test-compile</phase><goals><goal>test-compile</goal></goals></execution></executions></plugin><plugin><artifactId>maven-surefire-plugin</artifactId><version>2.22.2</version></plugin><plugin><artifactId>maven-failsafe-plugin</artifactId><version>2.22.2</version></plugin><plugin><groupId>org.codehaus.mojo</groupId><artifactId>exec-maven-plugin</artifactId><version>1.6.0</version><configuration><mainClass>MainKt</mainClass></configuration></plugin></plugins></build></project>
2 测试代码
package com.xu.com.xu.transimport org.bytedeco.javacpp.Loader
import org.bytedeco.javacpp.Pointer
import org.bytedeco.opencv.global.opencv_core
import org.bytedeco.opencv.global.opencv_highgui
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.Point2f
import org.bytedeco.opencv.opencv_core.Rect
import org.bytedeco.opencv.opencv_core.Scalar
import org.bytedeco.opencv.opencv_core.Size
import org.bytedeco.opencv.opencv_highgui.MouseCallbackobject Cropping {init {Loader.load(opencv_core::class.java)}// 使用 Kotlin 的数据类来存储鼠标状态data class MouseState(val image: Mat) {lateinit var temp: Matvar second: Point = Point()var first: Point = Point()var drawing: Boolean = false}@JvmStaticfun main(args: Array<String>) {roi()}/*** 裁切** @since 2025年1月20日12点33分*/private fun roi() {// 读取图像val src = opencv_imgcodecs.imread("C:\\Users\\hyacinth\\Desktop\\1.png")if (src == null || src.empty()) {return}val (size, point) = select(src)println("${point.x()},${point.x()}")val dst = Mat()opencv_imgproc.getRectSubPix(src,size, // 裁剪大小Point2f(point), // 裁剪图片中心dst)// 显示ROIopencv_highgui.imshow("src", src)opencv_highgui.imshow("dst", dst)opencv_highgui.waitKey(0)}/*** 仿射变换 图像裁剪** @since 2025年1月20日12点33分*/private fun roi2() {// 读取图像val src = opencv_imgcodecs.imread("C:\\Users\\hyacinth\\Desktop\\1.png")if (src == null || src.empty()) {return}// 定义裁剪区域val rect = Rect(100, 100, 400, 200)// 应用透视变换val images = Mat(src, rect)// 显示结果opencv_highgui.imshow("ORACLE", src)opencv_highgui.imshow("CROPPING", images)opencv_highgui.waitKey(0)}/*** 仿射变换 图像裁剪** @since 2025年1月20日12点33分*/private fun roi3(type: Int) {// 读取图像val src = opencv_imgcodecs.imread("C:\\Users\\hyacinth\\Desktop\\1.png")if (src == null || src.empty()) {return}val dst = Mat()opencv_imgproc.getRectSubPix(src,Size(400, 200), // 裁剪大小Point2f((src.rows() / 2.0).toFloat(), (src.cols() / 2.0).toFloat()), // 裁剪图片中心dst)// 显示ROIopencv_highgui.imshow("src", src)opencv_highgui.imshow("dst", dst)opencv_highgui.waitKey(0)}/*** 画矩形** @since 2025年1月20日12点33分*/private fun select(image: Mat): Pair<Size, Point2f> {val window = "Drawing"// 创建窗口opencv_highgui.namedWindow(window, opencv_highgui.WINDOW_AUTOSIZE)// 创建状态对象val state = MouseState(image)// 用于保存临时画布state.temp = image.clone()// 创建鼠标回调对象val callback = object : MouseCallback() {override fun call(event: Int, x: Int, y: Int, flags: Int, params: Pointer?) {when (event) {// 鼠标按钮按下opencv_highgui.EVENT_LBUTTONDOWN -> {state.drawing = truestate.first.x(x)state.first.y(y)}// 鼠标移动opencv_highgui.EVENT_MOUSEMOVE -> {if (state.drawing) {// 复制原始画布state.temp = state.image.clone()state.second.x(x)state.second.y(y)// 在临时画布上绘制矩形(蓝色预览)opencv_imgproc.rectangle(state.temp,Rect(Point(state.first), Point(state.second)),Scalar(255.0, 0.0, 0.0, 0.0))// 显示预览opencv_highgui.imshow(window, state.temp)}}// 鼠标按钮回弹opencv_highgui.EVENT_LBUTTONUP -> {state.drawing = falsestate.second.x(x)state.second.y(y)// 在最终画布上绘制矩形(绿色)opencv_imgproc.rectangle(state.image,Rect(Point(state.first), Point(state.second)),Scalar(0.0, 255.0, 0.0, 0.0))// 显示最终画布opencv_highgui.imshow(window, state.image)}}}}// 设置鼠标回调opencv_highgui.setMouseCallback(window, callback, null)// 主循环while (true) {opencv_highgui.imshow(window, state.temp)if (opencv_highgui.waitKey(1).toChar() == 27.toChar()) {opencv_highgui.destroyWindow(window)return Pair(Size(state.second.x() - state.first.x(),state.second.y() - state.first.y()),Point2f((0.5 * state.second.x() + 0.5 * state.first.x()).toFloat(),(0.5 * state.second.y() + 0.5 * state.first.y()).toFloat()))}}}}
3 测试结果

相关文章:
Kotlin Bytedeco OpenCV 图像图像57 图像ROI
Kotlin Bytedeco OpenCV 图像图像57 图像ROI 1 添加依赖2 测试代码3 测试结果 1 添加依赖 <?xml version"1.0" encoding"UTF-8"?> <project xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xmlns"http://maven.apache.o…...
支持大功率输出高速频闪的图像处理用光源控制器
机器视觉系统中的光源控制器在确保图像质量、提高系统稳定性、降低能耗以及方便系统扩展和升级等方面发挥着重要作用。它可提供稳定光源,调节参数,另外具有操作便捷性。 下面我们来看Gardasoft的光源控制器,Gardasoft拥有作为图像处理用LED光…...
《从入门到精通:蓝桥杯编程大赛知识点全攻略》(五)-数的三次方根、机器人跳跃问题、四平方和
本博客将详细探讨如何通过二分查找算法来解决这几个经典问题。通过几个实际的例子,我们将展示如何在这些问题中灵活应用二分查找,优化计算过程,并在面对大数据量时保持高效性。 目录 前言 数的三次方根 算法思路 代码如下 机器人跳跃问题…...
Java-数据结构-二叉树习题(2)
第一题、平衡二叉树 ① 暴力求解法 📚 思路提示: 该题要求我们判断给定的二叉树是否为"平衡二叉树"。 平衡二叉树指:该树所有节点的左右子树的高度相差不超过 1。 也就是说需要我们会求二叉树的高,并且要对节点内所…...
解锁面向对象编程:Python 类与对象详解
🏠大家好,我是Yui_💬 🍑如果文章知识点有错误的地方,请指正!和大家一起学习,一起进步👀 🚀如有不懂,可以随时向我提问,我会全力讲解~ ὒ…...
国产编辑器EverEdit -重复行
1 重复行 1.1 应用场景 在代码或文本编辑过程中, 经常需要快速复制当前行,比如,给对象的多个属性进行赋值。传统的做法是:选中行-> 复制-> 插入新行-> 粘贴,该操作有4个步骤,非常繁琐。 那有没…...
记一次数据库连接 bug
整个的报错如下: com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: Could not create connection to database server. Attempted reconnect 3 times. Giving up. at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Metho…...
【Springboot相关知识】Springboot结合SpringSecurity实现身份认证以及接口鉴权
Springboot结合SpringSecurity实现身份认证以及接口鉴权 身份认证1. 添加依赖2. 配置JWT工具类3. 配置Spring Security4. 创建JWT请求过滤器5. 创建认证控制器6. 创建请求和响应对象7. 配置UserDetailsService8. 运行应用程序9. 测试总结 接口鉴权1. 启用方法级安全注解2. 定义…...
算法竞赛之差分进阶——等差数列差分 python
目录 前置知识进入正题实战演练 前置知识 给定区间 [ l, r ],让我们把数组中的[ l, r ] 区间中的每一个数加上c,即 a[ l ] c , a[ l 1 ] c , a[ l 2] c , a[ r ] c; 怎么做?很简单,差分一下即可 还不会的小伙伴点此进入学习 进入正题 …...
20250121在Ubuntu20.04.6下使用Linux_Upgrade_Tool工具给荣品的PRO-RK3566开发板刷机
sudo upgrade_tool uf update.img 20250121在Ubuntu20.04.6下使用Linux_Upgrade_Tool工具给荣品的PRO-RK3566开发板刷机 2025/1/21 11:54 百度:ubuntu RK3566 刷机 firefly rk3566 ubuntu upgrade_tool烧写详解 https://wiki.t-firefly.com/Core-3566JD4/03-upgrad…...
【Elasticsearch】Springboot编写Elasticsearch的RestAPI
RestAPI 初始化RestClient创建索引库Mapping映射 判断索引库是否存在删除索引库总结 ES官方提供了各种不同语言的客户端,用来操作ES。这些客户端的本质就是组装DSL语句,通过http请求发送给ES。 官方文档地址 由于ES目前最新版本是8.8,提供了全…...
Python数据可视化(够用版):懂基础 + 专业的图表抛给Tableau等专业绘图工具
我先说说文章标题中的“够用版”啥意思,为什么这么写。 按照我个人观点,在使用Python进行数据分析时,我们有时候肯定要结合到图表去进行分析,去直观展现数据的规律和特定,那么我们肯定要做一些简单的可视化࿰…...
1.21学习
misc buuctf-爱因斯坦 下载附件后是一个图片,用stegsolve查看一下,各个色都没有问题,然后看一下数据分析,除此之外无其他信息,再看看图片属性,不知道是啥,用随波逐流进行binwalk文件提取然后得…...
SoftGNSS软件接收机源码阅读(一)程序简介、运行调试、执行流程
原始 Markdown文档、Visio流程图、XMind思维导图见:https://github.com/LiZhengXiao99/Navigation-Learning 文章目录 一、softGNSS 简介1、概述2、相关工作3、我用 softGNSS 做的事4、文件结构5、程序执行流程图 二、程序使用1、射频前端2、参数设置3、处理开源数据…...
Spring Boot AOP实现动态数据脱敏
依赖&配置 <!-- Spring Boot AOP起步依赖 --> <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-aop</artifactId> </dependency>/*** Author: 说淑人* Date: 2025/1/18 23:03* Desc…...
Leetcode刷题-二分查找
灵神的二分视频:二分查找 红蓝染色法_哔哩哔哩_bilibili 34 class Solution:def searchRange(self, nums: List[int], target: int) -> List[int]:right len(nums) - 1left 0res [-1,-1]mid int((right left)/2)while right > left:if nums[mid] < …...
凭证Account Assignment的校验(FAGL_VALIDATE)
本文主要介绍在S4 HANA OP中凭证Account Assignment的校验配置。具体请参照如下内容: 目录 1. 定义Account Assignment校验策略(FAGL_VALIDATE) 1.1 Derivation Rule 1.2 Assignment 1.3 Initialize 1.4 Enhancement 2. 分配Account Assignment校验策略给公司…...
【20】Word:小许-质量管理-论文❗
目录 题目 NO1.2.3.4.5 NO6.7 NO8 NO9 NO10.11 题目 NO1.2.3.4.5 另存为“Word.docx”文件在考生文件夹下,F12Fn是另存为的作用布局→页面设置对话框→纸张:大小A4→页边距:上下左右不连续ctrl选择除表格外的所有内容→开始→字体对…...
二十八、Qos服务质量
Qos服务质量 一、产生原因 Resources也不是万能的,使用一段时间后,资源总量可能会超过接节点配置。 根据这个情况,我们可以设置,清除资源。给pod配置,按顺序删除 二、服务质量QoS分类 Guaranteed:最高服务质量(保证),当宿主机内存不够时,会先kill掉QoS为BestEffort…...
Flutter 改完安卓 applicationId 后App 闪退问题。
一、问题 当我们项目创建完,想 build.gradle 改 applicationId 的时候,再次执行的时候可能会出现 app 闪退问题, 控制台不显示任何错误提示 也不出现 Exit 停止运行的情况。(像下方这样, 而 app 只是在模拟器中一闪而…...
DeOldify模型压缩与量化教程:在边缘设备实现轻量级上色
DeOldify模型压缩与量化教程:在边缘设备实现轻量级上色 你是不是也想过,把那个能把老照片变彩色的DeOldify模型,塞进你的手机或者一个小盒子里?想象一下,随时随地给家里的老相册上色,不用依赖云端…...
像素幻梦视觉系统拆解:#e3f2fd像素蓝UI设计与物理反馈机制
像素幻梦视觉系统拆解:#e3f2fd像素蓝UI设计与物理反馈机制 1. 像素幻梦创意工坊概述 Pixel Dream Workshop(像素幻梦创意工坊)是一款基于FLUX.1-dev扩散模型的像素艺术生成工具。与传统AI绘图工具不同,它采用了独特的16-bit现代…...
lora-scripts应用案例:电商主图自动生成,快速训练商品风格模型
LoRA-Scripts应用案例:电商主图自动生成,快速训练商品风格模型 1. 电商主图生成的痛点与解决方案 电商运营每天面临大量商品主图制作需求,传统方式存在三个核心痛点: 人力成本高:专业设计师单张主图制作成本50-200元…...
火绒安全软件6.0 深度评测 | 安静、安全、纯粹的“反PUA型“杀毒软件
🛡️ 火绒安全软件6.0 深度评测 一、 软件简介 定义:Windows终端安全软件,成立于2012年,以“干净”著称。定位:只做安全本质(不做浏览器、输入法、导航),不靠广告赚钱(…...
OpenClaw+Qwen3.5-9B:学术论文阅读助手开发实录
OpenClawQwen3.5-9B:学术论文阅读助手开发实录 1. 项目背景与需求 作为一名经常需要阅读大量学术论文的研究人员,我长期被两个问题困扰:一是PDF文献的快速消化效率低下,二是跨领域专业术语的理解成本高昂。传统解决方案要么依赖…...
FLUX.1-dev像素生成器效果对比:不同采样器(Euler/DPM++)像素质感差异
FLUX.1-dev像素生成器效果对比:不同采样器(Euler/DPM)像素质感差异 1. 像素幻梦创意工坊简介 像素幻梦 (Pixel Dream Workshop) 是基于FLUX.1-dev扩散模型构建的专业像素艺术生成工具。它采用独特的16-bit像素工坊视觉设计,为创…...
基于Ubuntu20.04的SenseVoice-Small高性能部署方案
基于Ubuntu20.04的SenseVoice-Small高性能部署方案 语音识别技术正逐渐成为人机交互的重要桥梁,而如何在生产环境中高效部署模型成为很多开发者的实际需求。本文将手把手带你完成SenseVoice-Small在Ubuntu20.04系统上的高性能部署。 1. 环境准备与系统优化 在开始部…...
若依框架单体应用版:从建表到增删改查,代码生成器实战指南
1. 若依框架单体应用版快速上手 第一次接触若依框架时,我被它的代码生成器功能惊艳到了。作为一个长期奋战在业务开发一线的程序员,最头疼的就是重复编写那些千篇一律的增删改查代码。若依的单体应用版(前后端不分离)特别适合中小…...
PDF-Extract-Kit-1.0在Linux系统下的高效部署指南
PDF-Extract-Kit-1.0在Linux系统下的高效部署指南 1. 开篇:为什么选择PDF-Extract-Kit? 如果你经常需要从PDF文档中提取内容,肯定遇到过各种头疼的问题:格式错乱、表格识别不准、公式无法提取、排版复杂难以处理。PDF-Extract-K…...
关于wokwi运行程序出错,而实机运行正常的问题
## 先说结论: # 由于wokwi的时间流速和现实不一致,所以rtos的调度可能会有一点差异,导致一些“逻辑有问题但是时序正好能运行”的代码时序改变,然后挂掉了。可以通过backtraceaddr2line寻找出错代码,然后检查逻辑解决#…...
