Halcon 矫正图像 图像矫正

目录

原图

矫正后的图像

​编辑

示例代码 


原图

矫正后的图像

示例代码 

找ROI部分代码暂无法分享

HomMat2DInvert := []Row_T := []Col_T := []region_features (ROI, 'rectangularity', Value)if (Value > RectY)HomMat2DInvert := []smallest_rectangle1 (ROI, Row_T, Col_T, Row2, Column2)reduce_domain (Image, ROI, ImageReduced)crop_domain (ImageReduced, ImagePart)move_region (ROI, ROIM, -Row_T, -Col_T)else* 矫正boundary (ROI, RegionBorder, 'inner')gen_contour_region_xld (RegionBorder, Contours, 'border')segment_contours_xld (Contours, ContoursSplit, 'lines', 15, 4, 2)area_center (ROI, Area, Row, Column)select_shape_xld (ContoursSplit, XLD1, 'rect2_phi', 'and', rad(-20), rad(20))* 标记UT := 0DT := 0LT := 0RT := 0* 上select_shape_xld (XLD1, XLD, 'row1', 'and', -1, Row)length_xld (XLD, Length)tuple_median (Length, Median)select_shape_xld (XLD, XLD, 'contlength', 'and', max2(200,Median), 999999999)count_obj (XLD, Num)if (Num == 1)copy_obj (XLD, XLDUp, 1, 1)fit_line_contour_xld (XLDUp, 'tukey', -1, 0, 5, 2, RowBeginUp, ColBeginUp, RowEndUp, ColEndUp, Nr, Nc, Dist)elseUT := 1sort_contours_xld (XLD, SortedContours, 'upper_left', 'true', 'column')select_obj (SortedContours, XLDUp_1, 1)select_obj (SortedContours, XLDUp_2, Num)fit_line_contour_xld (XLDUp_1, 'tukey', -1, 0, 5, 2, RowBeginUp1, ColBeginUp1, RowEndUp1, ColEndUp1, Nr, Nc, Dist)fit_line_contour_xld (XLDUp_2, 'tukey', -1, 0, 5, 2, RowBeginUp2, ColBeginUp2, RowEndUp2, ColEndUp2, Nr, Nc, Dist)endif* 下select_shape_xld (XLD1, XLD, 'row1', 'and', Row, Row*3)length_xld (XLD, Length)tuple_median (Length, Median)select_shape_xld (XLD, XLD, 'contlength', 'and', max2(200,Median), 999999999)count_obj (XLD, Num)if (Num == 1)copy_obj (XLD, XLDDown, 1, 1)fit_line_contour_xld (XLDDown, 'tukey', -1, 0, 5, 2, RowBeginDown, ColBeginDown, RowEndDown, ColEndDown, Nr, Nc, Dist)elseDT := 1sort_contours_xld (XLD, SortedContours, 'upper_left', 'true', 'column')select_obj (SortedContours, XLDDown_1, 1)select_obj (SortedContours, XLDDown_2, Num)fit_line_contour_xld (XLDDown_1, 'tukey', -1, 0, 5, 2, RowBeginDown1, ColBeginDown1, RowEndDown1, ColEndDown1, Nr, Nc, Dist)fit_line_contour_xld (XLDDown_2, 'tukey', -1, 0, 5, 2, RowBeginDown2, ColBeginDown2, RowEndDown2, ColEndDown2, Nr, Nc, Dist)endifselect_shape_xld (ContoursSplit, XLD1, ['rect2_phi','rect2_phi'], 'or', [rad(70),rad(-110)], [rad(110),rad(-70)])* 左select_shape_xld (XLD1, XLD, 'column1', 'and', -1, Column)length_xld (XLD, Length)tuple_median (Length, Median)select_shape_xld (XLD, XLD, 'contlength', 'and', max2(200,Median), 999999999)count_obj (XLD, Num)if (Num == 1)copy_obj (XLD, XLDLeft, 1, 1)fit_line_contour_xld (XLDLeft, 'tukey', -1, 0, 5, 2, RowBeginLeft, ColBeginLeft, RowEndLeft, ColEndLeft, Nr, Nc, Dist)elseLT := 1sort_contours_xld (XLD, SortedContours, 'upper_left', 'true', 'row')select_obj (SortedContours, XLDLeftUp, 1)select_obj (SortedContours, XLDLeftDown, Num)fit_line_contour_xld (XLDLeftUp, 'tukey', -1, 0, 5, 2, RowBeginLeft1, ColBeginLeft1, RowEndLeft1, ColEndLeft1, Nr, Nc, Dist)fit_line_contour_xld (XLDLeftDown, 'tukey', -1, 0, 5, 2, RowBeginLeft2, ColBeginLeft2, RowEndLeft2, ColEndLeft2, Nr, Nc, Dist)endif* 右select_shape_xld (XLD1, XLD, 'column1', 'and', Column, Column*3)length_xld (XLD, Length)tuple_median (Length, Median)select_shape_xld (XLD, XLD, 'contlength', 'and', max2(200,Median), 999999999)count_obj (XLD, Num)if (Num == 1)copy_obj (XLD, XLDRight, 1, 1)fit_line_contour_xld (XLDRight, 'tukey', -1, 0, 5, 2, RowBeginRight, ColBeginRight, RowEndRight, ColEndRight, Nr, Nc, Dist)elseRT := 1sort_contours_xld (XLD, SortedContours, 'upper_left', 'true', 'row')select_obj (SortedContours, XLDRight_1, 1)select_obj (SortedContours, XLDRight_2, Num)fit_line_contour_xld (XLDRight_1, 'tukey', -1, 0, 5, 2, RowBeginRight1, ColBeginRight1, RowEndRight1, ColEndRight1, Nr, Nc, Dist)fit_line_contour_xld (XLDRight_2, 'tukey', -1, 0, 5, 2, RowBeginRight2, ColBeginRight2, RowEndRight2, ColEndRight2, Nr, Nc, Dist)endif* 左上if (UT == 1)if (LT == 1)intersection_lines (RowBeginUp1, ColBeginUp1, RowEndUp1, ColEndUp1, RowBeginLeft1, ColBeginLeft1, RowEndLeft1, ColEndLeft1, LURow, LUCol, IsOverlapping)elseintersection_lines (RowBeginUp1, ColBeginUp1, RowEndUp1, ColEndUp1, RowBeginLeft, ColBeginLeft, RowEndLeft, ColEndLeft, LURow, LUCol, IsOverlapping)endifelseif (LT == 1)intersection_lines (RowBeginUp, ColBeginUp, RowEndUp, ColEndUp, RowBeginLeft1, ColBeginLeft1, RowEndLeft1, ColEndLeft1, LURow, LUCol, IsOverlapping)elseintersection_lines (RowBeginUp, ColBeginUp, RowEndUp, ColEndUp, RowBeginLeft, ColBeginLeft, RowEndLeft, ColEndLeft, LURow, LUCol, IsOverlapping)endifendif* 左下if (LT == 1)if (DT == 1)intersection_lines (RowBeginLeft2, ColBeginLeft2, RowEndLeft2, ColEndLeft2, RowBeginDown1, ColBeginDown1, RowEndDown1, ColEndDown1, LDRow, LDCol, IsOverlapping)elseintersection_lines (RowBeginLeft2, ColBeginLeft2, RowEndLeft2, ColEndLeft2, RowBeginDown, ColBeginDown, RowEndDown, ColEndDown, LDRow, LDCol, IsOverlapping)endifelseif (DT == 1)intersection_lines (RowBeginLeft, ColBeginLeft, RowEndLeft, ColEndLeft, RowBeginDown1, ColBeginDown1, RowEndDown1, ColEndDown1, LDRow, LDCol, IsOverlapping)elseintersection_lines (RowBeginLeft, ColBeginLeft, RowEndLeft, ColEndLeft, RowBeginDown, ColBeginDown, RowEndDown, ColEndDown, LDRow, LDCol, IsOverlapping)endifendif* 右下if (DT == 1)if (RT == 1)intersection_lines (RowBeginDown2, ColBeginDown2, RowEndDown2, ColEndDown2, RowBeginRight2, ColBeginRight2, RowEndRight2, ColEndRight2, RDRow, RDCol, IsOverlapping)elseintersection_lines (RowBeginDown2, ColBeginDown2, RowEndDown2, ColEndDown2, RowBeginRight, ColBeginRight, RowEndRight, ColEndRight, RDRow, RDCol, IsOverlapping)endifelseif (RT == 1)intersection_lines (RowBeginDown, ColBeginDown, RowEndDown, ColEndDown, RowBeginRight2, ColBeginRight2, RowEndRight2, ColEndRight2, RDRow, RDCol, IsOverlapping)elseintersection_lines (RowBeginDown, ColBeginDown, RowEndDown, ColEndDown, RowBeginRight, ColBeginRight, RowEndRight, ColEndRight, RDRow, RDCol, IsOverlapping)endifendif* 右上if (UT == 1)if (RT == 1)intersection_lines (RowBeginUp2, ColBeginUp2, RowEndUp2, ColEndUp2, RowBeginRight1, ColBeginRight1, RowEndRight1, ColEndRight1, RURow, RUCol, IsOverlapping)elseintersection_lines (RowBeginUp2, ColBeginUp2, RowEndUp2, ColEndUp2, RowBeginRight, ColBeginRight, RowEndRight, ColEndRight, RURow, RUCol, IsOverlapping)endifelseif (RT == 1)intersection_lines (RowBeginUp, ColBeginUp, RowEndUp, ColEndUp, RowBeginRight1, ColBeginRight1, RowEndRight1, ColEndRight1, RURow, RUCol, IsOverlapping)elseintersection_lines (RowBeginUp, ColBeginUp, RowEndUp, ColEndUp, RowBeginRight, ColBeginRight, RowEndRight, ColEndRight, RURow, RUCol, IsOverlapping)endifendif* 左上 左下 右下 右上RP := [LURow,LDRow,RDRow,RURow]CP := [LUCol,LDCol,RDCol,RUCol]gen_cross_contour_xld (Cross, RP, CP, 20, 0.785398)* 上边长distance_pp (LURow, LUCol, RURow, RUCol, DistUp)* 下边长distance_pp (LDRow, LDCol, RDRow, RDCol, DistDown)* 左边长distance_pp (LURow, LUCol, LDRow, LDCol, DistLeft)* 右边长distance_pp (RURow, RUCol, RDRow, RDCol, DistRight)Hei := (DistLeft + DistRight)/2.0Wid := (DistUp + DistDown)/2.0RQ := [0,Hei,Hei,0]CQ := [0,0,Wid,Wid]Xabs := abs(DistUp - DistDown)Yabs := abs(DistLeft - DistRight)if (abs(DistUp - DistDown) >= 20 or abs(DistLeft - DistRight) >= 20)hom_vector_to_proj_hom_mat2d (RP, CP, [1,1,1,1], RQ, CQ, [1,1,1,1], 'normalized_dlt', HomMat2D)projective_trans_image (Image, ImageP, HomMat2D, 'bilinear', 'false', 'false')projective_trans_region (ROI, ROIP, HomMat2D, 'bilinear')hom_mat2d_invert (HomMat2D, HomMat2DInvert)smallest_rectangle1 (ROIP, Row_T, Col_T, Row2, Column2)reduce_domain (ImageP, ROIP, ImageReduced)crop_domain (ImageReduced, ImagePart)move_region (ROIP, ROIM, -Row_T, -Col_T)elseHomMat2DInvert := []smallest_rectangle1 (ROI, Row_T, Col_T, Row2, Column2)reduce_domain (Image, ROI, ImageReduced)crop_domain (ImageReduced, ImagePart)move_region (ROI, ROIM, -Row_T, -Col_T)endif

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

Spring Boot 3.x 中使用 SpringDoc 2 / Swagger3(详解)

大家好,我是码哥,《Redis 高手心法》作者。 SpringBoot 已经成为 Java 开发的首选框架,今天码哥跟大家聊一聊 Spring Boot3 如何与 Swagger3 集成打造一个牛逼轰轰的接口文档。 为什么要用 Swagger 唐二婷:我最讨厌两件事&#xf…

Java中四种引用类型【快速理解】图文

一、强引用 我们正常手动new出来的对象都是强应用,不对他进行别的操作的时候它是不会进行垃圾回收的。除非将它的引用断开,此时调用垃圾回收器才会将它回收。 二、软引用 三、虚引用 虚引用的意思就是,引用关系是虚的,如果创造出…

C语言-详细讲解-洛谷P1075 [NOIP2012 普及组] 质因数分解

1.题目要求 2.题目解析 解题点在于如何分解质因数&#xff0c;这里介绍一下短除法。&#xff08;虽然解决这个问题可以不用短除法&#xff09; 3.代码实现 贴一下自己的代码 #include <stdio.h> #include <math.h>int main() {int n, i;scanf("%d",…

Kubernetes Extended Resource 扩展资源使用简介

Kubernetes 除了提供基于 CPU 和内存的传统计算资源调度外&#xff0c;还支持自定义的 Extended Resource 扩展资源&#xff0c;以便调度和管理其它各种类型的资源。 Extended Resource Extended Resource 扩展资源的创建和使用过程如下图所示&#xff1a; 定义资源&#xff…

javaweb基于springboot社区养老服务管理系统

简介&#xff1a; 系统整体设计分为三个角色&#xff0c;分别是社区员工、社区老人、社区系统管理员。在功能模块上分为三大块&#xff1a;人员管理模块、健康管理模块和活动管理模块。 人员管理模块能够对社区系统管理员信息、社区员工信息、社区老人信息进行管理。健康管理模…

鸿蒙应用App测试-专项测试(DevEco Testing)

注意&#xff1a;大家记得先学通用测试在学专项测试 鸿蒙应用App测试-通用测试-CSDN博客 注意&#xff1a;博主有个鸿蒙专栏&#xff0c;里面从上到下有关于鸿蒙next的教学文档&#xff0c;大家感兴趣可以学习下 如果大家觉得博主文章写的好的话&#xff0c;可以点下关注&am…

Jenkins应用详解(Detailed Explanation of Jenkins Application)

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:Linux运维老纪的首页…

《大道平渊》· 廿肆 —— 欲望应当内敛,而非张扬。

《大道平渊》 廿肆 什么是欲望&#xff1f;哲学家德勒兹认为&#xff0c;欲望没有客体。 其本身&#xff0c;就是一种渴望维持自身的运动。 欲望是由生物的本性产生的、想达到某种目的的要求&#xff0c;无善恶之分。 . 那么欲望的本身是什么&#xff1f; 是一种情绪和思想…

支持向量机相关证明 解的稀疏性

主要涉及拉格朗日乘子法&#xff0c;对偶问题求解

ProtoBuf 快速上手

关于 ProtoBuf 的含义和安装推荐看&#xff1a;ProtoBuf 的含义和安装 步骤0&#xff1a;引⼊ ProtoBuf 包 <!-- protobuf ⽀持 Java 核⼼包 --> <dependency><groupId>com.google.protobuf</groupId><artifactId>protobuf-java</artifactI…

apt镜像源制作-ubuntu22.04

# 安装必要的软件 sudo apt-get install -y apt-mirror # 编辑/etc/apt/mirror.list,添加以下内容 set base_path /var/spool/apt-mirror # 指定要镜像的Ubuntu发布和组件-null dir jammy-updates main restricted universe multiverse # 镜像的Ubuntu发布和组件的URL-n…

TLU - Net:一种用于钢材表面缺陷自动检测的深度学习方法

摘要&#xff1a; 钢铁表面缺陷检测是钢铁板制造过程中的一个关键步骤。近年来&#xff0c;已经研究了许多基于机器学习的自动化视觉检测 (AVI) 方法。然而&#xff0c;由于 AVI 方法的训练时间和准确性问题&#xff0c;大多数钢铁制造行业仍然使用人工视觉检测。自动钢铁缺陷检…

设计模式讲解02—责任链模式(Chain)

1. 概述 定义&#xff1a;责任链模式是一种行为型模式&#xff0c;在这个模式中&#xff0c;通常创建了一个接收者对象的链来处理请求&#xff0c;该请求沿着链的顺序传递。直到有对象处理该请求为止&#xff0c;从而达到解耦请求发送者和请求处理者的目的。 解释&#xff1a;责…

Java | Leetcode Java题解之第542题01矩阵

题目&#xff1a; 题解&#xff1a; class Solution {static int[][] dirs {{-1, 0}, {1, 0}, {0, -1}, {0, 1}};public int[][] updateMatrix(int[][] matrix) {int m matrix.length, n matrix[0].length;// 初始化动态规划的数组&#xff0c;所有的距离值都设置为一个很大…

ServletContext介绍

文章目录 1、ServletContext对象介绍1_方法介绍2_用例分析 2、ServletContainerInitializer1_整体结构2_工作原理3_使用案例 3、Spring案例源码分析1_注册DispatcherServlet2_注册配置类3_SpringServletContainerInitializer 4_总结 ServletContext 表示上下文对象&#xff0c;…

virtualBox部署minikube+istio

环境准备 virtualBox安装 直接官网下载后安装即可&#xff0c;网上也有详细教程。镜像使用的centos7。 链接&#xff08;不保证还可用&#xff09;&#xff1a;http://big.dxiazaicc.com/bigfile/100/virtualbox_v6.1.26_downcc.com.zip?auth_key1730185635-pWBtV8LynsxPD0-0-…

QT 实现绘制汽车仪表盘

1.界面实现效果 以下是具体的项目需要用到的效果展示,通常需要使用QPainter类来绘制各种图形和文本,包括一个圆形的仪表盘、刻度、指针和数字。 2.简介 分为以下几个部分,首先设置抗锯齿 painter.setRenderHint(QPainter::Antialiasing)。 QPainter p(this);p.setRender…

Node.js——fs模块-文件读取

1、文件读取&#xff1a;通过程序从文件中去除其中的数据 2、方法 方法 说明 readFile 异步读取 readFileSync 同步读取 createReadStrean 流式读取 3、readFile 异步读取 语法&#xff1a; 本文的分享到此结束&#xff0c;欢迎大家评论区一同讨论学习&#xff0c;下一…

cv2.threshold利用OSTU方法分割图像的前景和背景

OSTU方法&#xff0c;又称大津法或最大类间方差法&#xff0c;是一种在图像处理中广泛应用的自动阈值选择方法。该方法由日本学者大津&#xff08;Nobuyuki Otsu&#xff09;于1979年提出&#xff0c;旨在通过最大化前景与背景之间的类间方差来自动确定一个最佳阈值&#xff0c…

Perforce《2024游戏技术现状报告》Part2:游戏引擎、版本控制、IDE及项目管理等多种开发工具的应用分析

游戏开发者一直处于创新前沿。他们的实践、工具和技术受到各行各业的广泛关注&#xff0c;正在改变着组织进行数字创作的方式。 近期&#xff0c;Perforce发布了《2024游戏技术现状报告》&#xff0c;通过收集来自游戏、媒体与娱乐、汽车和制造业等高增长行业的从业者、管理人…