Kotlin Bytedeco OpenCV 图像图像57 图像ROI

ops/2025/1/21 17:03:02/

Kotlin Bytedeco OpenCV 图像图像57 图像ROI

  • 1 添加依赖
  • 2 测试代码
  • 3 测试结果

1 添加依赖

kotlin"><?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 测试代码

kotlin">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 测试结果

在这里插入图片描述


http://www.ppmy.cn/ops/151954.html

相关文章

使用 HTML 开发 Portal 页全解析

前言 在当今数字化时代&#xff0c;网站作为企业和个人展示信息、提供服务的重要窗口&#xff0c;其重要性不言而喻。而 Portal 页&#xff0c;作为网站的核心页面之一&#xff0c;承担着引导用户、整合信息等关键任务。那么&#xff0c;如何使用 HTML 开发一个功能齐全、界面…

【HarmonyOS NAPI 深度探索11】搭建 NAPI 开发环境:HarmonyOS DevEco Studio 全指南

【HarmonyOS NAPI 深度探索11】搭建 NAPI 开发环境&#xff1a;HarmonyOS DevEco Studio 全指南 在开始 NAPI 开发之前&#xff0c;一个高效、完善的开发环境是成功的第一步。对于 HarmonyOS 开发者来说&#xff0c;DevEco Studio 是最推荐的开发工具&#xff0c;它为 Harmony…

【开源免费】基于SpringBoot+Vue.JS夕阳红公寓管理系统(JAVA毕业设计)

本文项目编号 T 146 &#xff0c;文末自助获取源码 \color{red}{T146&#xff0c;文末自助获取源码} T146&#xff0c;文末自助获取源码 目录 一、系统介绍二、数据库设计三、配套教程3.1 启动教程3.2 讲解视频3.3 二次开发教程 四、功能截图五、文案资料5.1 选题背景5.2 国内…

基于Python机器学习的双色球数据分析与预测

python统计分析2003-2024年所有的中奖记录,通过人工智能机器学习预测双色球,个人意见,仅供参考. 声明&#xff1a;双色球具有随机性&#xff0c;任何工具无法预测。本文章仅作为技术交流&#xff0c;提供学习参考。本文所涉及的代码均为python之机器学习的代码。双色球为公益事…

C++学习第五天

创作过程中难免有不足&#xff0c;若您发现本文内容有误&#xff0c;恳请不吝赐教。 提示&#xff1a;以下是本篇文章正文内容&#xff0c;下面案例可供参考 一、构造函数 问题1 关于编译器生成的默认成员函数&#xff0c;很多童鞋会有疑惑&#xff1a;不实现构造函数的情况下…

HTML之拜年/跨年APP(改进版)

目录&#xff1a; 一&#xff1a;目录 二&#xff1a;效果 三&#xff1a;页面分析/开发逻辑 1.页面详细分析&#xff1a; 2.开发逻辑&#xff1a; 四&#xff1a;完整代码&#xff08;不多废话&#xff09; index.html部分 app.json部分 二&#xff1a;效果 三&#xff1a;页面…

《AI赋能光追:开启图形渲染新时代》

光线追踪技术是图形渲染领域的重大突破&#xff0c;能够通过模拟光的传播路径&#xff0c;精准渲染反射、折射、阴影和间接光照等效果&#xff0c;实现高度逼真的场景呈现。而人工智能的加入&#xff0c;更是为光线追踪技术带来了前所未有的变革&#xff0c;主要体现在以下几个…

LeetCode - #187 Swift 实现重复的DNA序列

网罗开发 &#xff08;小红书、快手、视频号同名&#xff09; 大家好&#xff0c;我是 展菲&#xff0c;目前在上市企业从事人工智能项目研发管理工作&#xff0c;平时热衷于分享各种编程领域的软硬技能知识以及前沿技术&#xff0c;包括iOS、前端、Harmony OS、Java、Python等…