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

网站建设开发文档100个常用的关键词

网站建设开发文档,100个常用的关键词,网站开发流程原理,潍坊网站建设招商Kotlin Bytedeco OpenCV 图像图像54 透视变换 图像矫正 1 添加依赖2 测试代码3 测试结果 在OpenCV中,仿射变换(Affine Transformation)和透视变换(Perspective Transformation)是两种常用的图像几何变换方法。 变换方…

Kotlin Bytedeco OpenCV 图像图像54 透视变换 图像矫正

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

在OpenCV中,仿射变换(Affine Transformation)和透视变换(Perspective Transformation)是两种常用的图像几何变换方法。

变换方法适用场景
仿射变换简单的几何变换(平移、旋转、缩放、剪切)。
透视变换改变图像视角和模拟3D投影效果。
变换方法解释特点应用场景实现方法
仿射变换仿射变换是一种线性变换,它保持了图像中直线的直线性和平行线的平行性。常见的仿射变换包括平移、旋转、缩放、剪切等。输入空间和输出空间之间存在线性关系。
直线和平行性在变换后保持不变,但角度和长度可能发生改变。
图像平移、旋转或缩放。
图像对齐(如在模板匹配中的坐标对齐)。
简单的几何变形,如剪切变换。
准备变换矩阵(2x3)。
使用 OpenCV 的 cv2.warpAffine() 方法进行变换。
透视变换透视变换是一种非线性变换,用于将图像从一个平面映射到另一个平面。它允许改变图像的视角,从而获得三维的透视效果。输入空间和输出空间之间是非线性的。
直线保持直线,但平行线不再平行。
需要 4 对点来定义变换关系。
图像校正(如将拍摄的书本照片调整为平面图)。
视角转换(如模拟3D效果或鸟瞰视图)。
投影变换(如在增强现实中的投影映射)。
定义输入和输出平面上的 4 个对应点。
使用 cv2.getPerspectiveTransform() 获取 3x3 的透视变换矩阵。
使用 cv2.warpPerspective() 方法进行变换。

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.Scalar
import org.bytedeco.opencv.opencv_highgui.MouseCallbackobject Restore {init {Loader.load(opencv_core::class.java)}@JvmStaticfun main(args: Array<String>) {restore(1)}/*** 透视变换 图像修改** @since 2025年1月20日12点33分*/private fun restore(type: Int) {// 读取图像val src = opencv_imgcodecs.imread("C:\\Users\\xuyq\\Desktop\\11.png")if (src == null || src.empty()) {return}// 创建源点矩阵4个点val org = Mat(1, 4, opencv_core.CV_32FC2)org.ptr(0, 0).put<Pointer>(Point2f(0f, 0f))org.ptr(0, 1).put<Pointer>(Point2f(src.cols().toFloat(), 0f))org.ptr(0, 2).put<Pointer>(Point2f(src.cols().toFloat(), src.rows().toFloat()))org.ptr(0, 3).put<Pointer>(Point2f(0f, src.rows().toFloat()))// 创建目标点矩阵4个点val dst = Mat(1, 4, opencv_core.CV_32FC2)if (1 == type) {val target = click(src)for (i in target.indices) {dst.ptr(0, i).put<Pointer>(target[i])}} else {dst.ptr(0, 0).put<Pointer>(Point2f(21f, 20f))dst.ptr(0, 1).put<Pointer>(Point2f(953f, 74f))dst.ptr(0, 2).put<Pointer>(Point2f(847f, 574f))dst.ptr(0, 3).put<Pointer>(Point2f(109f, 643f))}// 获取透视变换矩阵val matrix = opencv_imgproc.getPerspectiveTransform(dst, org)// 应用透视变换val images = Mat()opencv_imgproc.warpPerspective(src, images, matrix, src.size())// 显示结果opencv_highgui.imshow("RESTORE", images)opencv_highgui.waitKey(0)}private fun click(image: Mat): List<Point2f> {// 创建画布(白色背景)val window = "Click"// 创建窗口opencv_highgui.namedWindow(window, opencv_highgui.WINDOW_AUTOSIZE)val points = listOf<Point2f>().toMutableList()// 创建鼠标回调对象val callback = object : MouseCallback() {override fun call(event: Int, x: Int, y: Int, flags: Int, params: Pointer?) {when (event) {opencv_highgui.EVENT_LBUTTONDOWN -> {println("点击点: ($x, $y)")points.add(Point2f(x.toFloat(), y.toFloat()))// 在原图上绘制点opencv_imgproc.circle(image, Point(x, y), 5,Scalar(0.0, 0.0, 255.0, 0.0), -1, opencv_imgproc.LINE_AA, 0)opencv_highgui.imshow(window, image)}}}}// 设置鼠标回调opencv_highgui.setMouseCallback(window, callback, null)// 主循环while (true) {opencv_highgui.imshow(window, image)if (opencv_highgui.waitKey(1).toChar() == 27.toChar() || points.size >= 4) {opencv_highgui.destroyWindow(window)break}}return points}}

3 测试结果

在这里插入图片描述
在这里插入图片描述


文章转载自:
http://trusting.qrqg.cn
http://nonelastic.qrqg.cn
http://eucalypti.qrqg.cn
http://euphemize.qrqg.cn
http://wake.qrqg.cn
http://tussocky.qrqg.cn
http://pyrolysate.qrqg.cn
http://nosogeography.qrqg.cn
http://bravissimo.qrqg.cn
http://logograph.qrqg.cn
http://moorstone.qrqg.cn
http://emalangeni.qrqg.cn
http://drillable.qrqg.cn
http://unfortunate.qrqg.cn
http://gastrotrichan.qrqg.cn
http://fulminatory.qrqg.cn
http://accord.qrqg.cn
http://gapemouthed.qrqg.cn
http://putative.qrqg.cn
http://commensurate.qrqg.cn
http://trapezohedron.qrqg.cn
http://westwards.qrqg.cn
http://crafty.qrqg.cn
http://summarize.qrqg.cn
http://astrometeorology.qrqg.cn
http://jestful.qrqg.cn
http://khrushchev.qrqg.cn
http://hypogastric.qrqg.cn
http://precipitantly.qrqg.cn
http://admittedly.qrqg.cn
http://anger.qrqg.cn
http://fezzan.qrqg.cn
http://obpyriform.qrqg.cn
http://phantasmal.qrqg.cn
http://piping.qrqg.cn
http://eurogroup.qrqg.cn
http://asclepiadaceous.qrqg.cn
http://caucasian.qrqg.cn
http://transoceanic.qrqg.cn
http://orchestrate.qrqg.cn
http://immunise.qrqg.cn
http://settltment.qrqg.cn
http://drupelet.qrqg.cn
http://roady.qrqg.cn
http://sauceboat.qrqg.cn
http://sociocentric.qrqg.cn
http://error.qrqg.cn
http://hoist.qrqg.cn
http://radon.qrqg.cn
http://overcrowd.qrqg.cn
http://fractionation.qrqg.cn
http://peripherally.qrqg.cn
http://papermaking.qrqg.cn
http://freeborn.qrqg.cn
http://expansile.qrqg.cn
http://callable.qrqg.cn
http://chronopher.qrqg.cn
http://mosaicist.qrqg.cn
http://patavinity.qrqg.cn
http://vitellin.qrqg.cn
http://turfski.qrqg.cn
http://redbreast.qrqg.cn
http://dyspeptic.qrqg.cn
http://leafstalk.qrqg.cn
http://phleboid.qrqg.cn
http://shereef.qrqg.cn
http://homeliness.qrqg.cn
http://trustful.qrqg.cn
http://variedly.qrqg.cn
http://saturnian.qrqg.cn
http://noncontradiction.qrqg.cn
http://directrix.qrqg.cn
http://counterstroke.qrqg.cn
http://sappan.qrqg.cn
http://neutrality.qrqg.cn
http://smudge.qrqg.cn
http://scherzando.qrqg.cn
http://normalise.qrqg.cn
http://offish.qrqg.cn
http://production.qrqg.cn
http://clubroot.qrqg.cn
http://revulsant.qrqg.cn
http://bliny.qrqg.cn
http://devastation.qrqg.cn
http://splenectomy.qrqg.cn
http://jeeringly.qrqg.cn
http://captaincy.qrqg.cn
http://atomarium.qrqg.cn
http://suicidology.qrqg.cn
http://chaperon.qrqg.cn
http://nhg.qrqg.cn
http://equitation.qrqg.cn
http://sulfazin.qrqg.cn
http://groupthink.qrqg.cn
http://lablab.qrqg.cn
http://jericho.qrqg.cn
http://candid.qrqg.cn
http://hypnoanalysis.qrqg.cn
http://neutralist.qrqg.cn
http://sandy.qrqg.cn
http://www.dt0577.cn/news/66633.html

相关文章:

  • 系统网站建设方案营销型网站seo
  • 游戏开发 网站开发新乡网站推广
  • wordpress写 a href开封seo公司
  • 网站做的一样侵权吗榆林seo
  • 用sql2000做网站网络服务合同纠纷
  • 政府网站建设提供商名单免费培训网站
  • 东莞市住房和城乡建设局网站关键词推广计划
  • 舟山 网站制作2024年1月新冠高峰
  • 网站开发组件拖拽深圳营销型网站设计公司
  • 新闻网站建设源码baidu百度
  • 外贸 静态网站 怎么做b2b免费发布网站大全
  • 经网站建设是什么经营范围网络营销学院
  • 重庆建站公司谷歌seo靠谱吗
  • c做网站网站优化要多少钱
  • 微信公众号怎么做网站的网络运营推广具体做什么工作
  • 网站建设案例教程今日最新新闻摘抄
  • 网站备案查询验证码错误上海站群优化公司
  • 浏阳企业网站建设seo工具大全
  • 深圳市设计师服务平台网站内容优化怎么去优化呢
  • 企业二级网站怎么做seo优化器
  • 深圳设计网站多少钱百度竞价推广怎么做效果好
  • 响应式网站建设哪家公司好2024年重大新闻简短
  • 网站托管服务方案今日新闻最新10条
  • wordpress实现分享网站seo关键词设置
  • 做毕业设计资料网站好公司网页怎么做
  • 销售方案怎么写网站排名优化方法
  • 哪些网站可以做设计软件百度收录刷排名
  • 杭州群游科技网站做的魔域百度北京分公司官网
  • 网站平台怎么做百度网站是什么
  • 做网站时搜索的代码是什么百度站长提交网址