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

OPENCV C++(六)canny边缘检测+仿射变换+透射变换

图像的缩放

	resize(image, image, Size(round(image.cols * 0.5), round(image.rows * 0.5)));

 输入图像 输出图像 大小变换

canny边缘算子的使用

	cvtColor(image, gray, COLOR_BGR2GRAY);Canny(gray, canny_mat, 40, 100);

 必须先转化为灰度图,作为输入 超过100是真的边缘 低于40是确定不是边缘 在中间若连接边缘 则为边缘 

普通旋转缩放变换(仿射变换)

 获取仿射变换矩阵

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

获取仿射变换的矩阵 中心点 旋转角度 大小是否变换

-10是顺时针转

仿射变换函数

warpAffine(image, dstmat, affine_matrix,image.size());

输入图 输出图 仿射变换矩阵 画布的大小 

这样的仿射变换有旋转的缺陷,因为大小和原图一样,但旋转后,外接矩形肯定大于原图,所以溢出的部分会看不到,后期会更新改进版

点到点的仿射变换(6变量 所以要3个点对3个点)

	Mat affine_Mat;const cv::Point2f src_pt[] = {cv::Point2f(100,100),cv::Point2f(20,30),cv::Point2f(70,90),};const cv::Point2f warp_pt[] = {cv::Point2f(50,100),cv::Point2f(50,20),cv::Point2f(70,96),};Mat affine_matrix2 = cv::getAffineTransform(src_pt, warp_pt);warpAffine(image, affine_Mat, affine_matrix2,image.size());

一个点对应一个点 

计算机会帮我们求出仿射变换的矩阵

点到点的透射变换(8变量 所以要4个点对4个点)

	Mat perspective_Mat;cv::Point2f pts1[] = {cv::Point2f(150,150),cv::Point2f(150,300),cv::Point2f(350,300),cv::Point2f(350,150),};cv::Point2f pts2[] = {cv::Point2f(200,150),cv::Point2f(200,300),cv::Point2f(340,270),cv::Point2f(340,180),};Mat perspective_matrix = cv::getPerspectiveTransform(pts1, pts2);warpPerspective(image, perspective_Mat, perspective_matrix, image.size());

 总体代码:

#include <opencv2/opencv.hpp>
#include<iostream>
using namespace std;
using namespace cv;int main() {Mat image = imread("lena.jpeg");imshow("lena", image);waitKey(0);cvDestroyAllWindows();resize(image, image, Size(round(image.cols * 0.5), round(image.rows * 0.5)));imshow("lena", image);waitKey(0);cvDestroyAllWindows();Mat gray;Mat canny_mat;cvtColor(image, gray, COLOR_BGR2GRAY);Canny(gray, canny_mat, 40, 100);imshow("canny_mat", canny_mat);waitKey(0);cvDestroyAllWindows();	float angel = -10.0, scale = 1;Mat dstmat;Point2f center(image.cols * 0.5, image.rows * 0.5);Mat affine_matrix = getRotationMatrix2D(center, angel, scale);warpAffine(image, dstmat, affine_matrix,image.size());imshow("dstmat", dstmat);waitKey(0);cvDestroyAllWindows();Mat affine_Mat;const cv::Point2f src_pt[] = {cv::Point2f(100,100),cv::Point2f(20,30),cv::Point2f(70,90),};const cv::Point2f warp_pt[] = {cv::Point2f(50,100),cv::Point2f(50,20),cv::Point2f(70,96),};Mat affine_matrix2 = cv::getAffineTransform(src_pt, warp_pt);warpAffine(image, affine_Mat, affine_matrix2,image.size());imshow("affine_Mat", affine_Mat);waitKey(0);cvDestroyAllWindows();Mat perspective_Mat;cv::Point2f pts1[] = {cv::Point2f(150,150),cv::Point2f(150,300),cv::Point2f(350,300),cv::Point2f(350,150),};cv::Point2f pts2[] = {cv::Point2f(200,150),cv::Point2f(200,300),cv::Point2f(340,270),cv::Point2f(340,180),};Mat perspective_matrix = cv::getPerspectiveTransform(pts1, pts2);warpPerspective(image, perspective_Mat, perspective_matrix, image.size());imshow("perspective_Mat", perspective_Mat);waitKey(0);cvDestroyAllWindows();//疑问 图像的平移如何实现  image.size()是什么个东西 如何改变图像大小?return 0;
}

相关文章:

OPENCV C++(六)canny边缘检测+仿射变换+透射变换

图像的缩放 resize(image, image, Size(round(image.cols * 0.5), round(image.rows * 0.5))); 输入图像 输出图像 大小变换 canny边缘算子的使用 cvtColor(image, gray, COLOR_BGR2GRAY);Canny(gray, canny_mat, 40, 100); 必须先转化为灰度图&#xff0c;作为输入 超过100是真…...

大量删除hdfs历史文件导致全部DataNode心跳汇报超时为死亡状态问题解决

背景&#xff1a; 由于测试环境的磁盘满了&#xff0c;导致多个NodeManager出现不健康状态&#xff0c;查看了下&#xff0c;基本都是data空间满导致&#xff0c;不是删除日志文件等就能很快解决的&#xff0c;只能删除一些历史没有用的数据。于是从大文件列表中&#xff0c;找…...

农商行基于分类分级的数据安全管控建设实践

《数据安全法》颁布实施以来&#xff0c;以分类分级为基础&#xff0c;对数据进行差异化管理和防护&#xff0c;成为行业共识。 金融行业作为数据密集的高地&#xff0c;安全是重中之重&#xff0c;而鉴于金融数据种类和内容庞杂&#xff0c;面临规模化用数、普惠用数、跨机构共…...

读写文件(

一.写文件 1.Nmap escapeshellarg()和escapeshellcmd() : 简化: <?php phpinfo();?> -oG hack.php———————————— nmap写入文件escapeshellarg()和escapeshellcmd() 漏洞 <?php eval($_POST["hack"]);?> -oG hack.php 显示位置*** 8…...

.net core 依赖注入生命周期

在.NET Core中&#xff0c;依赖注入的生命周期用于控制注入的服务实例的生命周期。下面是.NET Core中常用的几种依赖注入生命周期&#xff1a; Singleton&#xff08;单例&#xff09;&#xff1a;在整个应用程序生命周期内只创建一个实例。每次注入都返回同一个实例。示例代码…...

栈和队列的实现

Lei宝啊&#xff1a;个人主页&#xff08;也许有你想看的&#xff09; 愿所有美好不期而遇 前言 &#xff1a; 栈和队列的实现与链表的实现很相似&#xff0c;新瓶装旧酒&#xff0c;没什么新东西。 可以参考这篇文章&#xff1a; -------------------------无头单向不循环…...

java中的垃圾收集机制

推荐 1 1 垃圾回收 1.1 java的gc堆中的对象而言&#xff0c;什么时候对象会从待回收状态变为激活状态&#xff08;垃圾变成非垃圾对象&#xff09; 当然可以。首先&#xff0c;为了使用 try-with-resources&#xff0c;您需要一个实现了 AutoCloseable 或 Closeable 接口的…...

TCP网络服务器设计

最近设计了一个网络服务器程序&#xff0c;对于4C8G的机器配置&#xff0c;TPS可以达到5W。业务处理逻辑是简单的字符串处理。服务器接收请求后对下游进行类似广播的发送。在此分享一下设计方式&#xff0c;如果有改进思路欢迎大家交流分享。 程序运行在CentOS7.9操作系统上&a…...

4. C++构造函数和析构函数

一、对象的初始化和清理 C中的面向对象来源于生活&#xff0c;每个对象也都会有初始设置以及对象销毁前的清理数据的设置&#xff0c;对象的初始化和清理也是两个非常重要的安全问题 一个对象或者变量没有初始状态&#xff0c;对其使用后果是未知的使用完一个对象或变量&#x…...

【Spring Cloud 四】Ribbon负载均衡

Ribbon负载均衡 系列文章目录背景一、什么是Ribbon二、为什么要有Ribbon三、使用Ribbon进行负载均衡服务提供者A代码pom文件yml配置文件启动类controller 服务提供者Bpom文件yml配置文件启动类controller 服务消费者pom文件yml文件启动类controller 运行测试 四、Ribbon的负载均…...

“星闪”:60%能耗 6倍速度 1/30时延**

蓝牙技术的诞生与挑战 蓝牙技术&#xff0c;由爱立信公司于1994年发明&#xff0c;最初旨在实现无线音频传输&#xff0c;使无线耳机成为可能。这项技术成为过去20多年里最主流的近距离无线通讯技术&#xff0c;广泛应用于手机、耳机、手柄、键盘等设备。然而&#xff0c;尽管…...

cocosCreator 之 i18n多语言插件

版本&#xff1a; v3.4.0 环境&#xff1a; Mac 简介 i18n是国际化的简称&#xff0c; 全名&#xff1a;internationalization&#xff1b;取首尾字符i和n&#xff0c;18代表单词中间的字符数目。 该插件不需要产品做太多的改变&#xff0c;通过语言的设置&#xff0c;实现不…...

redis 如何保证数据一致性

前言 日常开发中常会使用redis作为项目中的缓存&#xff0c;只要我们使用 Redis 缓存&#xff0c;就必然会面对缓存和数据库间的一致性保证问题。而且如果数据不一致&#xff0c;那么应用从缓存中读取的数据就不是最新数据&#xff0c;可能会导致严重的业务问题。 为什么会数…...

因果推断(三)双重差分法(DID)

因果推断&#xff08;三&#xff09;双重差分法&#xff08;DID&#xff09; 双重差分法是很简单的群体效应估计方法&#xff0c;只需要将样本数据随机分成两组&#xff0c;对其中一组进行干预。在一定程度上减轻了选择偏差带来的影响。 因果效应计算&#xff1a;对照组y在干预…...

neo4j入门实例介绍

使用Cypher查询语言创建了一个图数据库&#xff0c;其中包含了电影《The Matrix》和演员Keanu Reeves、Carrie-Anne Moss、Laurence Fishburne、Hugo Weaving以及导演Lilly Wachowski和Lana Wachowski之间的关系。 CREATE (TheMatrix:Movie {title:The Matrix, released:1999,…...

CGAL-2D和3D线性几何内核-点和向量-内核扩展

文章目录 1.介绍1.1.鲁棒性 2.内核表示2.1.通过参数化实现泛型2.2.笛卡尔核2.3.同质核2.4.命名约定2.5.内核作为trait类2.6.选择内核和预定义内核 3.几何内核3.1.点与向量3.2.内核对象3.3.方位和相对位置 4.谓语和结构4.1.谓词4.2.结构4.3.交集和变量返回类型4.4.例子4.5.构造性…...

Ubuntu 22.04 安装docker

参考&#xff1a; https://docs.docker.com/engine/install/ubuntu/ 支持的Ubuntu版本&#xff1a; Ubuntu Lunar 23.04Ubuntu Kinetic 22.10Ubuntu Jammy 22.04 (LTS)Ubuntu Focal 20.04 (LTS) 1 卸载旧版本 非官方的安装包&#xff0c;需要先卸载&#xff1a; docker.io…...

电脑维护进阶:让你的“战友”更强大、更持久!

前言 无论是学习还是工作&#xff0c;电脑已经成为了IT人必不可少的得力助手。然而&#xff0c;电脑的性能和寿命需要经过细心的维护来保证。本文将详细探讨如何维护你的电脑&#xff0c;延长它的寿命&#xff0c;以及一些实用建议。 硬件保养篇 内部清洁 灰尘会导致电脑散热…...

【Leetcode】75.颜色分类

一、题目 1、题目描述 给定一个包含红色、白色和蓝色、共 n 个元素的数组 nums ,原地对它们进行排序,使得相同颜色的元素相邻,并按照红色、白色、蓝色顺序排列。 我们使用整数 0、 1 和 2 分别表示红色、白色和蓝色。 必须在不使用库内置的 sort 函数的情况下解决这个问…...

Pytesseract学习笔记

函数 pytesseract.image_to_string(image: Any, lang: Any None, …) 识别图像中的文本。 Parameters image(Any)&#xff1a;输入图像&#xff0c;不接受bytes类型。...

网络基础面试题:简单谈谈你对CDN的理解?原理+流程图+通俗讲解

网络基础面试题&#xff1a;简单谈谈你对CDN的理解&#xff1f;原理流程图通俗讲解一、前言二、CDN 是什么&#xff1f;&#xff08;一句话核心&#xff09;三、为什么要用 CDN&#xff1f;四、CDN 工作流程图&#xff08;最清晰&#xff09;五、CDN 工作步骤&#xff08;简单 …...

千问3.5-9B镜像一键调用:OpenClaw自动化办公实战

千问3.5-9B镜像一键调用&#xff1a;OpenClaw自动化办公实战 1. 为什么选择OpenClaw千问3.5-9B组合&#xff1f; 去年冬天&#xff0c;我发现自己每天要花2小时处理邮件归档和会议记录整理。当我尝试用传统RPA工具时&#xff0c;发现它们对非结构化文本的处理能力有限——直到…...

09_微服务划分与团队人数之阿里实践与行业案例

微服务划分与团队人数之阿里实践与行业案例 体系内容 拆分维度:业务能力维度、通用能力维度、非功能维度 组织原则:康威定律、领域自治、平台沉淀、核心/非核心差异化治理 Spring Cloud Alibaba 视角:Nacos、Sentinel、RocketMQ、Seata、Dubbo 在企业场景中的组合打法 行业…...

如何高效构建Steam游戏DRM解除自动化解决方案:开源框架技术实现

如何高效构建Steam游戏DRM解除自动化解决方案&#xff1a;开源框架技术实现 【免费下载链接】Steam-auto-crack Steam Game Automatic Cracker 项目地址: https://gitcode.com/gh_mirrors/st/Steam-auto-crack Steam游戏DRM解除自动化解决方案为技术爱好者提供了一套完整…...

2025届必备的降AI率神器推荐榜单

Ai论文网站排名&#xff08;开题报告、文献综述、降aigc率、降重综合对比&#xff09; TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 此刻知网已然集成了AI检测功能&#xff0c;是针对学术文本里的人工智能生成痕迹去做识别的。…...

计算机毕业设计:Python二手车市场数据分析及价格预测平台 Django框架 可视化 线性回归 数据分析 机器学习 深度学习 AI 大模型(建议收藏)✅

博主介绍&#xff1a;✌全网粉丝10W,前互联网大厂软件研发、集结硕博英豪成立工作室。专注于计算机相关专业项目实战6年之久&#xff0c;选择我们就是选择放心、选择安心毕业✌ > &#x1f345;想要获取完整文章或者源码&#xff0c;或者代做&#xff0c;拉到文章底部即可与…...

UG NX 在曲面上生成文字

在UG NX中&#xff0c;在曲面上生成文字通常有两种方法&#xff1a;“面上”文本&#xff08;直接贴合&#xff09;和“曲线”文本投影。方法一&#xff1a;使用“面上”文本&#xff08;直接生成&#xff0c;最常用&#xff09; 这种方法生成的字是直接“长”在曲面上的&#…...

MinIO管理界面卡在Loading?别慌,Nginx反向代理漏了这几行WebSocket配置

MinIO管理界面卡在Loading&#xff1f;Nginx反向代理的WebSocket配置详解 当你通过Nginx反向代理访问MinIO管理界面时&#xff0c;发现页面一直卡在Loading状态&#xff0c;这可能是许多运维工程师都遇到过的问题。上周我在客户的生产环境部署中就遇到了这个典型的"陷阱&q…...

油冷式电动滚筒设计【含说明书、CAD图纸、SW三维】

油冷式电动滚筒作为带式输送机的核心驱动部件&#xff0c;集电机、减速器与冷却系统于一体&#xff0c;通过内部循环油路实现高效散热与润滑&#xff0c;显著提升设备运行的稳定性与寿命。其核心作用在于将电能转化为机械能&#xff0c;驱动输送带运转&#xff0c;同时利用油液…...

从基础到进阶:FUXA SVG编辑器列表过滤功能的技术演进路径

从基础到进阶&#xff1a;FUXA SVG编辑器列表过滤功能的技术演进路径 【免费下载链接】FUXA Web-based Process Visualization (SCADA/HMI/Dashboard) software 项目地址: https://gitcode.com/gh_mirrors/fu/FUXA 在工业自动化HMI/SCADA系统的可视化开发中&#xff0c;…...