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

OPENCV C++(七)霍夫线检测+找出轮廓和外接矩形+改进旋转

霍夫线检测

vector<Vec2f> lines1;HoughLines(canny_mat, lines1, 1, CV_PI / 180.0,90 );//45可以检测里面两条线 80检测出外边两条线

 定义存放输出线的向量 此向量输出有<距离,角度>

因为检测的原理就是在变换霍夫空间里面去检测的,这里可以理解为极坐标

第3个参数是距离精度 第四个参数是角度精度,第五个是阈值,只有点超过90个才算一条线

在图中画线操作:

Point ptz1, ptz2;for (size_t i = 0; i < lines1.size(); ++i) {float rth = lines1[i][0];//距离float theta = lines1[i][1];//角度double a = cos(theta);double b = sin(theta);double x0 = a * rth, y0 = b * rth;ptz1.x = cvRound(x0 + 1000 * (-b));ptz1.y = cvRound(y0 + 1000 * (a));ptz2.x = cvRound(x0 - 1000 * (-b));ptz2.y = cvRound(y0 - 1000 * (a));line(image1, ptz1, ptz2, Scalar(0, 255, 0), 2, 8);}

这里是画线操作 

概率霍夫线检测

vector<Vec4i>lines2;HoughLinesP(canny_mat, lines2, 1, CV_PI / 180.0, 25,25,32);//参数如何设置啊?  点数多少 最小长度 最大容忍间隔

后面三个参数依次是

// 大于阈值threshold的线段才可以被检测通过并返回到结果中。

// 表示最低线段的长度,比这个设定参数短的线段就不能被显现出来

// 允许将同一行点与点之间连接起来的最大的距离 

这里的画线操作就简单一点 直接画

	Point ptz3, ptz4;for (int j = 0; j < lines2.size(); j++) {ptz3.x = lines2[j][0];ptz3.y = lines2[j][1];ptz4.x = lines2[j][2];ptz4.y = lines2[j][3];line(image2, ptz3, ptz4, Scalar(0, 255, 255), 2, 8);}

 



轮廓的寻找

	Mat binary;threshold(gray, binary, 84, 255, THRESH_OTSU);imshow("binary", binary);waitKey(0);cvDestroyAllWindows();vector<vector<Point>> contours;findContours(binary, contours, RETR_EXTERNAL, CV_CHAIN_APPROX_SIMPLE);Mat image3clone = image3.clone();for (int i = 0; i < contours.size(); i++) {drawContours(image3clone, contours, i, Scalar(0, 255, 255), 2, 8);}

先是二值化图像,再用findcontours函数寻找轮廓,后面两个参数是寻找最外轮廓,内接轮廓就不管,用的是简单保存的方式。

画出轮廓用的是drawcontours来画轮廓,直接在图像上画出轮廓即可

画出轮廓外最小外接矩形

Point2f vtx[4];RotatedRect rbox = minAreaRect(contours[0]);rbox.points(vtx);for (int i = 0; i < 4; i++) {line(image3, vtx[i], vtx[i < 3 ? i + 1 : 0], CV_RGB(0, 255, 0), 2, CV_AA);}

定义4个点存储外接矩形定点,minAreaRect是外接矩形的rect,rbox.points是赋值给vtx,然后用一个简单的画线操作,依次画点和点的连线

改进版的图像旋转

前面的获得矩阵操作一样

	float angel = -10.0, scale = 1;Point2f center(lena.cols * 0.5, lena.rows * 0.5);Mat rot = getRotationMatrix2D(center, angel, scale);

获得外接矩形的作为最后的大小

Rect bbox = RotatedRect(center, lena.size(), angel).boundingRect();//获取外接矩形

然后得调整rot矩阵得参数,因为中心点有所偏移,需要平移操作

rot.at<double>(0, 2) += bbox.width / 2.0 - center.x;//调整仿射变换矩阵参数【a,b,l/n b,c,m】此步在调节l,m值
rot.at<double>(1, 2) += bbox.height / 2.0 - center.y;//				
Mat dst;
warpAffine(lena, dst, rot, bbox.size());

即可完成没有缺损得旋转图像!

相关文章:

OPENCV C++(七)霍夫线检测+找出轮廓和外接矩形+改进旋转

霍夫线检测 vector<Vec2f> lines1;HoughLines(canny_mat, lines1, 1, CV_PI / 180.0,90 );//45可以检测里面两条线 80检测出外边两条线 定义存放输出线的向量 此向量输出有<距离&#xff0c;角度> 因为检测的原理就是在变换霍夫空间里面去检测的&#xff0c;这里可…...

Error: EACCES: permission denied, rename ‘/usr/local/lib/node_modules/appium‘

在使用npm uninstall -g appium卸载appium的过程中报错 Error: EACCES: permission denied, rename /usr/local/lib/node_modules/appium -> /usr/local/lib/node_modules/.appium-cfBVovI6 npm ERR! code EACCES npm ERR! syscall rename npm ERR! path /usr/local/lib/n…...

CentOS 7中,配置了Oracle jdk,但是使用java -version验证时,出现的版本是OpenJDK,如何解决?

1.首先&#xff0c;检查已安装的jdk版本 sudo yum list installed | grep java2.移除、卸载圈红的系统自带的openjdk sudo yum remove java-1.7.0-openjdk.x86_64 sudo yum remove java-1.7.0-openjdk-headless.x86_64 sudo yum remove java-1.8.0-openjdk.x86_64 sudo yum r…...

牛客 松鼠回家(二分答案+最短路)

题目描述 松鼠宝宝由于贪玩去了一个具有n个点和m条边的无向图中&#xff0c;现在松鼠宝宝仅有h点体力&#xff0c;所有的边经过一次后会消耗部分体力&#xff0c;同时松鼠爸爸为了惩罚贪玩的松鼠宝宝&#xff0c;每到一个点会扣除部分松果&#xff08;起点的松果也会扣除&#…...

Mysql in 查询的奇怪方向

Mysql in 查询的奇怪方向 关于表字段存储的数据为 num1,num2,num3时, 还要通过多个num1,num2入参针对该字段进行查询 建表语句 CREATE TABLE test (test_ids varchar(100) DEFAULT NULL COMMENT 保存ids 以逗号分隔 ) ENGINEInnoDB;数据项 查询语句 SELECT test_ids FROM t…...

ORB-SLAM2第二节---双目地图初始化

比起单目初始化&#xff0c;而双目实现地图的初始化非常简单&#xff0c;只需要一帧&#xff08;左右目图像&#xff09;即可完成初始化。 行特征点统计。考虑用图像金字塔尺度作为偏移量&#xff0c;在当前点上下正负偏移量&#xff08;r)内的纵坐标值都认为是匹配点可能存在…...

后端常使用的中间件知识点--持续更新

类型难度mysqlmysql中SQL优化&#xff1a;多角度分析包学包会&#xff0c;sql优化全过程&#xff0c;刨根分析redis多角度剖析redis数据结构及底层实现原理、应用场景MQ简单大体说明RabbitMQ的使用&#xff08;简单版&#xff09;mybatis使用JDBC的批量插入百万数据要多少秒一遍…...

非科班的大家如何顺滑转码

近年来&#xff0c;很多人想要从其他行业跳槽转入计算机领域。非计算机科班如何丝滑转码&#xff1f;请来聊聊你的看法和观点&#xff0c;我本身是信息与计算科学专业&#xff0c;周围的同学有不少也是被这个名字“骗过来的”&#xff0c;看这个名字都以为是计算机相关专业&…...

webpack中常见的Loader

目录 1.webpack中的loader是什么&#xff1f;配置方式 2. loader特性3.常见的loader 1.webpack中的loader是什么&#xff1f; loader 用于对模块的"源代码"进行转换&#xff0c;在 import 或"加载"模块时预处理文件 webpack做的事情&#xff0c;仅仅是分…...

RabbitMQ:可靠消息传递的强大消息中间件

消息中间件在现代分布式系统中起着关键作用&#xff0c;它们提供了一种可靠且高效的方法来进行异步通信和解耦。在这篇博客中&#xff0c;我们将重点介绍 RabbitMQ&#xff0c;一个广泛使用的开源消息中间件。我们将深入探讨 RabbitMQ 的特性、工作原理以及如何在应用程序中使用…...

python 批量下载m3u8的视频

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家&#xff1a;点击跳转 方法&#xff1a; 解析m3u8&#xff0c;获取其中的ts列表&#xff0c;多线程下载所有ts文件。 全部下完之后&#xff0c;用ffmpeg合…...

最后一击

第二届上海市青少年算法竞赛&#xff08;小学组&#xff09; 题目描述 Description 小爱和小艾两人组队打一只怪兽。一开始怪兽有 n 点生命值&#xff0c;当 n 变成 0 或更低时&#xff0c;怪兽就被消灭了。他们两人是同时开始攻击的&#xff0c;小爱每分钟可以攻击 a 下&…...

K8S资源管理方式

K8S资源管理方式 文章目录 K8S资源管理方式一、陈述式资源管理1.基础命令操作2.创建pod3.查看资源状态4.查看pod中的容器日志5.进入pod中的容器6.删除pod资源7.pod扩容8.项目生命周期管理&#xff08;创建-->发布-->更新-->回滚-->删除&#xff09;8.1创建services…...

第三章 图论 No.9有向图的强连通与半连通分量

文章目录 定义Tarjan求SCC1174. 受欢迎的牛367. 学校网络1175. 最大半连通子图368. 银河 定义 连通分量是无向图的概念&#xff0c;yxc说错了&#xff0c;不要被误导 强连通分量&#xff1a;在一个有向图中&#xff0c;对于分量中的任意两点u&#xff0c;v&#xff0c;一定能从…...

回归预测 | MATLAB实现基于PSO-LSSVM-Adaboost粒子群算法优化最小二乘支持向量机结合AdaBoost多输入单输出回归预测

回归预测 | MATLAB实现基于PSO-LSSVM-Adaboost粒子群算法优化最小二乘支持向量机结合AdaBoost多输入单输出回归预测 目录 回归预测 | MATLAB实现基于PSO-LSSVM-Adaboost粒子群算法优化最小二乘支持向量机结合AdaBoost多输入单输出回归预测预测效果基本介绍模型描述程序设计参考…...

Mysql 和Oracle的区别

、mysql与oracle都是关系型数据库&#xff0c;Oracle是大型数据库&#xff0c;而MySQL是中小型数据库。但是MySQL是开源的&#xff0c;但是Oracle是收费的&#xff0c;而且比较贵。 1 2 mysql默认端口&#xff1a;3306&#xff0c;默认用户&#xff1a;root oracle默认端口&…...

在收藏夹里“积灰”的好东西——“收藏从未停止,行动从未开始”

方向一&#xff1a;分享一道你收藏的好题 小雅兰刚学数据结构与算法的时候&#xff0c;学的真的是很吃力&#xff0c;感觉链表真的特别的难&#xff0c;在学习了后面的知识之后&#xff0c;发现链表慢慢变得简单了&#xff0c;若是放在现在&#xff0c;小雅兰仍然觉得链表的知…...

【算法|数组】双指针

算法|数组——双指针 引入 给你一个按 非递减顺序 排序的整数数组 nums&#xff0c;返回 每个数字的平方 组成的新数组&#xff0c;要求也按 非递减顺序 排序。 示例 1&#xff1a; 输入&#xff1a;nums [-4,-1,0,3,10] 输出&#xff1a;[0,1,9,16,100] 解释&#xff1a;…...

asp.net core6 webapi 使用反射批量注入接口层和实现接口层的接口的类到ioc中

IBLL接口层类库 namespace IBLL {public interface ICar{string CarName();} } namespace IBLL {public interface IRed{string RedName();} }BLL实现接口层类库 namespace BLL {public class Car : ICar{public string CarName(){return "BBA";}} } namespace BLL…...

【2023】字节跳动 10 日心动计划——第九关

目录 1. 螺旋矩阵2. 划分字母区间3. 子集 II 1. 螺旋矩阵 &#x1f517; 原题链接&#xff1a;54. 螺旋矩阵 类似于BFS那样使用方向数组即可。 class Solution { public:vector<int> spiralOrder(vector<vector<int>>& matrix) {int m matrix.size(), …...

Appium+python自动化(十六)- ADB命令

简介 Android 调试桥(adb)是多种用途的工具&#xff0c;该工具可以帮助你你管理设备或模拟器 的状态。 adb ( Android Debug Bridge)是一个通用命令行工具&#xff0c;其允许您与模拟器实例或连接的 Android 设备进行通信。它可为各种设备操作提供便利&#xff0c;如安装和调试…...

2.Vue编写一个app

1.src中重要的组成 1.1main.ts // 引入createApp用于创建应用 import { createApp } from "vue"; // 引用App根组件 import App from ./App.vue;createApp(App).mount(#app)1.2 App.vue 其中要写三种标签 <template> <!--html--> </template>…...

【git】把本地更改提交远程新分支feature_g

创建并切换新分支 git checkout -b feature_g 添加并提交更改 git add . git commit -m “实现图片上传功能” 推送到远程 git push -u origin feature_g...

Java求职者面试指南:计算机基础与源码原理深度解析

Java求职者面试指南&#xff1a;计算机基础与源码原理深度解析 第一轮提问&#xff1a;基础概念问题 1. 请解释什么是进程和线程的区别&#xff1f; 面试官&#xff1a;进程是程序的一次执行过程&#xff0c;是系统进行资源分配和调度的基本单位&#xff1b;而线程是进程中的…...

【JavaSE】多线程基础学习笔记

多线程基础 -线程相关概念 程序&#xff08;Program&#xff09; 是为完成特定任务、用某种语言编写的一组指令的集合简单的说:就是我们写的代码 进程 进程是指运行中的程序&#xff0c;比如我们使用QQ&#xff0c;就启动了一个进程&#xff0c;操作系统就会为该进程分配内存…...

关于easyexcel动态下拉选问题处理

前些日子突然碰到一个问题&#xff0c;说是客户的导入文件模版想支持部分导入内容的下拉选&#xff0c;于是我就找了easyexcel官网寻找解决方案&#xff0c;并没有找到合适的方案&#xff0c;没办法只能自己动手并分享出来&#xff0c;针对Java生成Excel下拉菜单时因选项过多导…...

嵌入式常见 CPU 架构

架构类型架构厂商芯片厂商典型芯片特点与应用场景PICRISC (8/16 位)MicrochipMicrochipPIC16F877A、PIC18F4550简化指令集&#xff0c;单周期执行&#xff1b;低功耗、CIP 独立外设&#xff1b;用于家电、小电机控制、安防面板等嵌入式场景8051CISC (8 位)Intel&#xff08;原始…...

消息队列系统设计与实践全解析

文章目录 &#x1f680; 消息队列系统设计与实践全解析&#x1f50d; 一、消息队列选型1.1 业务场景匹配矩阵1.2 吞吐量/延迟/可靠性权衡&#x1f4a1; 权衡决策框架 1.3 运维复杂度评估&#x1f527; 运维成本降低策略 &#x1f3d7;️ 二、典型架构设计2.1 分布式事务最终一致…...

初探用uniapp写微信小程序遇到的问题及解决(vue3+ts)

零、关于开发思路 (一)拿到工作任务,先理清楚需求 1.逻辑部分 不放过原型里说的每一句话,有疑惑的部分该问产品/测试/之前的开发就问 2.页面部分(含国际化) 整体看过需要开发页面的原型后,分类一下哪些组件/样式可以复用,直接提取出来使用 (时间充分的前提下,不…...

简约商务通用宣传年终总结12套PPT模版分享

IOS风格企业宣传PPT模版&#xff0c;年终工作总结PPT模版&#xff0c;简约精致扁平化商务通用动画PPT模版&#xff0c;素雅商务PPT模版 简约商务通用宣传年终总结12套PPT模版分享:商务通用年终总结类PPT模版https://pan.quark.cn/s/ece1e252d7df...