当前位置: 首页 > article >正文

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.image

import org.bytedeco.javacpp.Loader
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.Scalar
import org.bytedeco.opencv.opencv_core.Size
import org.bytedeco.opencv.opencv_imgproc.Vec4fVector


object Circles {

    init {
        Loader.load(opencv_core::class.java)
    }

    @JvmStatic
    fun main(args: Array<String>) {
        roi()
    }

    /** ROI */
    private fun roi() {
        // 读取图像
        val src = opencv_imgcodecs.imread("C:\\Users\\xuyq\\Desktop\\2.png")
        if (src == null || src.empty()) {
            return
        }
        val dst = Mat()
        opencv_imgproc.getRectSubPix(
            src,
            Size(100, 100), // 裁剪大小
            Point2f((src.rows() / 2.0).toFloat(), (src.cols() / 2.0).toFloat()), // 裁剪图片中心
            dst
        )
        // 显示ROI
        opencv_highgui.imshow("src", src)
        opencv_highgui.imshow("dst", dst)
        opencv_highgui.waitKey(0)
    }

    /** 圆形检测 */
    private fun circles() {
        // 读取图像
        val src = opencv_imgcodecs.imread("C:\\Users\\hyacinth\\Desktop\\2.png")
        if (src == null || src.empty()) {
            return
        }
        // 中值模糊(滤波-->平滑)
        val img = Mat()
        opencv_imgproc.medianBlur(src, img, 1)
        // 图片转灰色
        val gray = Mat()
        opencv_imgproc.cvtColor(img, gray, opencv_imgproc.COLOR_BGR2GRAY)
        // 霍夫变换-圆形检测
        val point = Vec4fVector()
        opencv_imgproc.HoughCircles(
            gray.getPointer(),
            point,
            opencv_imgproc.HOUGH_GRADIENT,
            1.0,
            20.0,
            50.0,
            30.0,
            20,
            40
        )
        println(point.get().size)

        // 遍历每个圆并绘制到图像上
        for (i in 0 until point.size()) {
            val circle = point[i]
            val x = circle[0].toInt() // 圆心 x 坐标
            val y = circle[1].toInt() // 圆心 y 坐标
            val radius = circle[2].toInt() // 半径

            // 绘制圆心
            opencv_imgproc.circle(
                src,
                Point(x, y),
                5,
                Scalar(0.0, 255.0, 0.0, 0.0), // 绿色圆心
                -1, // 填充
                opencv_imgproc.LINE_AA,
                0
            )

            // 绘制圆周
            opencv_imgproc.circle(
                src,
                Point(x, y),
                radius,
                Scalar(255.0, 0.0, 0.0, 0.0), // 红色圆周
                2, // 边框宽度
                opencv_imgproc.LINE_AA,
                0
            )
        }

        // 显示结果
        opencv_highgui.imshow("Detected Circles", src)
        opencv_highgui.waitKey(0)
    }

}

3 测试结果

在这里插入图片描述


http://www.kler.cn/a/508612.html

相关文章:

  • 第8篇:从入门到精通:掌握Python异常处理
  • C# 获取PDF文档中的字体信息(字体名、大小、颜色、样式等
  • linux系统监视(centos 7)
  • c#删除文件和目录到回收站
  • 算法库里的heap算法,仿函数和模版进阶(续)
  • 《银行保险机构数据安全管理办法》正式实施,分类分级、安全评估共筑安全防线
  • BUUCTF Web
  • 哪些新兴技术对智能驾驶汽车影响最大?
  • Neo4j与Python交互
  • FFMpeg的一些常用命令
  • 一探究竟:如何高效提取ULL中的当前参数,实现性能与精度的完美平衡
  • 矩阵碰一碰发视频源码技术开发全解析,支持OEM
  • 【9.1】Golang后端开发系列--Gin快速入门指南
  • 机器学习(3):逻辑回归
  • CAP:Serverless + AI 让应用开发更简单
  • 分频器code
  • Java-数据结构-二叉树(配图详解)
  • SQL Server 导入Excel数据
  • 【Gossip 协议】Golang的实现库Memberlist 库简介
  • 深度学习项目--基于LSTM的火灾预测研究(pytorch实现)
  • 下定决心不去读研了。。。
  • Vue3组件通信进阶: 大型项目中Provide/Inject与EventBus的实战应用
  • Python基本概念与实践
  • 非安全函数
  • 华为OD机试E卷 ---最大值
  • Arm 计划涨价高达 300%,并考虑自行研发芯片