c++提取矩形区域图像的梯度并拟合直线

c++提取旋转矩形区域的边缘最强梯度点,并拟合直线
#include <opencv2/opencv.hpp>
#include <iostream>
#include <vector>using namespace cv;
using namespace std;int main() {// 加载图像Mat img = imread("image.jpg", IMREAD_GRAYSCALE);if (img.empty()) {cout << "Could not open or find the image!" << endl;return -1;}// 定义旋转矩形 (中心点, 大小, 旋转角度)Point2f center(img.cols / 2.0f, img.rows / 2.0f);Size2f size(200, 100); // 矩形大小float angle = 45; // 旋转角度RotatedRect rotatedRect(center, size, angle);// 提取旋转矩形区域Mat rotatedRegion;Mat rotationMatrix = getRotationMatrix2D(center, angle, 1.0);warpAffine(img, rotatedRegion, rotationMatrix, img.size(), INTER_LINEAR, BORDER_CONSTANT, Scalar(0));Rect boundingRect = rotatedRect.boundingRect();Mat croppedRegion = rotatedRegion(boundingRect);// 计算梯度Mat gradX, gradY, gradMag, gradDir;Sobel(croppedRegion, gradX, CV_32F, 1, 0); // X方向梯度Sobel(croppedRegion, gradY, CV_32F, 0, 1); // Y方向梯度magnitude(gradX, gradY, gradMag); // 梯度幅值phase(gradX, gradY, gradDir, true); // 梯度方向// 找到最强梯度点double minVal, maxVal;Point minLoc, maxLoc;minMaxLoc(gradMag, &minVal, &maxVal, &minLoc, &maxLoc);// 提取梯度最强的点vector<Point2f> strongGradientPoints;float threshold = 0.8 * maxVal; // 设置阈值for (int y = 0; y < gradMag.rows; y++) {for (int x = 0; x < gradMag.cols; x++) {if (gradMag.at<float>(y, x) > threshold) {strongGradientPoints.push_back(Point2f(x + boundingRect.x, y + boundingRect.y));}}}// 拟合直线Vec4f lineParams;fitLine(strongGradientPoints, lineParams, DIST_L2, 0, 0.01, 0.01);// 计算直线的两个端点Point2f linePoint(lineParams[2], lineParams[3]);Point2f lineDirection(lineParams[0], lineParams[1]);Point2f pt1 = linePoint - lineDirection * 1000; // 延长线Point2f pt2 = linePoint + lineDirection * 1000;// 在原图上绘制旋转矩形和拟合的直线Mat imgDisplay;cvtColor(img, imgDisplay, COLOR_GRAY2BGR);Point2f vertices[4];rotatedRect.points(vertices);for (int i = 0; i < 4; i++) {line(imgDisplay, vertices[i], vertices[(i + 1) % 4], Scalar(0, 255, 0), 2);}line(imgDisplay, pt1, pt2, Scalar(0, 0, 255), 2);// 显示结果imshow("Rotated Region", croppedRegion);imshow("Gradient Magnitude", gradMag);imshow("Result", imgDisplay);waitKey(0);return 0;
}
效果演示



相关文章:
c++提取矩形区域图像的梯度并拟合直线
c提取旋转矩形区域的边缘最强梯度点,并拟合直线 #include <opencv2/opencv.hpp> #include <iostream> #include <vector>using namespace cv; using namespace std;int main() {// 加载图像Mat img imread("image.jpg", IMREAD_GRAYS…...
Unity Shader Graph 2D - 角色身体电流覆盖效果
在游戏中,通常会有游戏角色受到“电击”的效果,此时游戏角色身体上会覆盖有电流,该效果能表明游戏角色的当前状态,让玩家能够获得更直观更好的体验。 那么如何实现呢 首先创建一个ShaderGraph文件,命名为Current,再创建对应的材质球M_Current。 基础的资源显示 老规矩,…...
【LLM-agent】(task4)搜索引擎Agent
note 新增工具:搜索引擎Agent 文章目录 note一、搜索引擎AgentReference 一、搜索引擎Agent import os from dotenv import load_dotenv# 加载环境变量 load_dotenv() # 初始化变量 base_url None chat_model None api_key None# 使用with语句打开文件…...
携程Java开发面试题及参考答案 (200道-下)
insert 一行数据的时候加的是什么锁?为什么? 在 MySQL 中,当执行 INSERT 操作插入一行数据时,加锁的情况会因存储引擎和具体的事务隔离级别而有所不同。一般来说,在 InnoDB 存储引擎下,INSERT 操作加的是行级排他锁(Row Exclusive Lock),以下详细说明原因。 行级排他…...
GWO优化SVM回归预测matlab
灰狼优化算法(Grey Wolf Optimizer,简称 GWO),是由澳大利亚格里菲斯大学的 Mirjalii 等人于 2014 年提出的群智能优化算法。该算法的设计灵感源自灰狼群体的捕食行为,核心思想是对灰狼社会的结构与行为模式进行模仿。 …...
QMK启用摇杆和鼠标按键功能
虽然选择了触摸屏,我仍选择为机械键盘嵌入摇杆模块,这本质上是对"操作连续性"的执着。 值得深思的是,本次开发过程中借助DeepSeek的代码生成与逻辑推理,其展现的能力已然颠覆传统编程范式,需求描述可自动…...
Unity实现按键设置功能代码
一、前言 最近在学习unity2D,想做一个横版过关游戏,需要按键设置功能,让用户可以自定义方向键与攻击键等。 自己写了一个,总结如下。 二、界面效果图 这个是一个csv文件,准备第一列是中文按键说明,第二列…...
基于物联网技术的实时数据流可视化研究(论文+源码)
1系统方案设计 根据系统功能的设计要求,展开基于物联网技术的实时数据流可视化研究设计。如图2.1所示为系统总体设计框图,系统以STM32单片机做为主控制器,通过DHT11、MQ-2、光照传感器实现环境中温湿度、烟雾、光照强度数据的实时检测&#x…...
list容器(详解)
1. list的介绍及使用 1.1 list的介绍(双向循环链表) https://cplusplus.com/reference/list/list/?kwlist(list文档介绍) 1. list是可以在常数范围内在任意位置进行插入和删除的序列式容器,并且该容器可以前后双向迭…...
Elasticsearch基本使用详解
文章目录 Elasticsearch基本使用详解一、引言二、环境搭建1、安装 Elasticsearch2、安装 Kibana(可选) 三、索引操作1、创建索引2、查看索引3、删除索引 四、数据操作1、插入数据2、查询数据(1)简单查询(2)…...
17.3.4 颜色矩阵
版权声明:本文为博主原创文章,转载请在显著位置标明本文出处以及作者网名,未经作者允许不得用于商业目的。 17.3.4.1 矩阵基本概念 矩阵(Matrix)是一个按照长方阵列排列的复数或实数集合,类似于数组。 由…...
FPGA 时钟多路复用
时钟多路复用 您可以使用并行和级联 BUFGCTRL 的组合构建时钟多路复用器。布局器基于时钟缓存 site 位置可用性查找最佳布局。 如果可能,布局器将 BUFGCTRL 布局在相邻 site 位置中以利用专用级联路径。如无法实现,则布局器将尝试将 BUFGCTRL 从…...
机器学习10
自定义数据集 使用scikit-learn中svm的包实现svm分类 代码 import numpy as np import matplotlib.pyplot as pltclass1_points np.array([[1.9, 1.2],[1.5, 2.1],[1.9, 0.5],[1.5, 0.9],[0.9, 1.2],[1.1, 1.7],[1.4, 1.1]])class2_points np.array([[3.2, 3.2],[3.7, 2.9],…...
【Block总结】CoT,上下文Transformer注意力|即插即用
一. 论文信息 标题: Contextual Transformer Networks for Visual Recognition论文链接: arXivGitHub链接: https://github.com/JDAI-CV/CoTNet 二. 创新点 上下文Transformer模块(CoT): 提出了CoT模块,能够有效利用输入键之间的上下文信息…...
linux库函数 gettimeofday() localtime的概念和使用案例
在Linux系统中,gettimeofday() 和 localtime() 是两个常用的时间处理函数,分别用于获取高精度时间戳和将时间戳转换为本地时间。以下是它们的概念和使用案例的详细说明: 1. gettimeofday() 函数 概念 功能:获取当前时间…...
编程题-电话号码的字母组合(中等)
题目: 给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。答案可以按 任意顺序 返回。 给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。 解法一(哈希表动态添加)&#x…...
EasyExcel使用详解
文章目录 EasyExcel使用详解一、引言二、环境准备与基础配置1、添加依赖2、定义实体类 三、Excel 读取详解1、基础读取2、自定义监听器3、多 Sheet 处理 四、Excel 写入详解1、基础写入2、动态列与复杂表头3、样式与模板填充 五、总结 EasyExcel使用详解 一、引言 EasyExcel 是…...
基于“蘑菇书”的强化学习知识点(二):强化学习中基于策略(Policy-Based)和基于价值(Value-Based)方法的区别
强化学习中基于策略(Policy-Based)和基于价值(Value-Based)方法的区别 摘要强化学习中基于策略(Policy-Based)和基于价值(Value-Based)方法的区别1. 定义与核心思想(1) 基于策略的方…...
民法学学习笔记(个人向) Part.2
民法学学习笔记(个人向) Part.2 民法始终在解决两个生活中的核心问题: 私法自治;交易安全; 3. 自然人 3.4 个体工商户、农村承包经营户 都是特殊的个体经济单位; 3.4.1 个体工商户 是指在法律的允许范围内,依法经…...
物业管理系统源码驱动社区管理革新提升用户满意度与服务效率
内容概要 在当今社会,物业管理正面临着前所未有的挑战,尤其是在社区管理方面。人们对社区安全、环境卫生、设施维护等日常生活需求愈发重视,物业公司必须提升服务质量,以满足居民日益增长的期望。而物业管理系统源码的出现&#…...
wxappUnpacker:让微信小程序源代码重见天日的开发者利器
wxappUnpacker:让微信小程序源代码重见天日的开发者利器 【免费下载链接】wxappUnpacker 项目地址: https://gitcode.com/gh_mirrors/wxappu/wxappUnpacker 在微信小程序开发过程中,开发者常常面临源代码被打包加密的困境,特别是当需…...
CK3M多轴运动控制器实战:EtherCAT总线伺服系统从零配置全解析
1. CK3M控制器与EtherCAT系统初识 第一次接触CK3M多轴运动控制器时,我完全被它强大的功能震撼到了。这款控制器就像工业自动化领域的"大脑",能够同时协调多个伺服电机精准运动。而EtherCAT总线技术则是连接这个大脑与各个执行机构(…...
2步实现格式自由:Save Image as Type让网页图片转换体验升级10倍
2步实现格式自由:Save Image as Type让网页图片转换体验升级10倍 【免费下载链接】Save-Image-as-Type Save Image as Type is an chrome extension which add Save as PNG / JPG / WebP to the context menu of image. 项目地址: https://gitcode.com/gh_mirrors…...
代理优先(Agent-First)软件开发全生命周期流程解析
1. 引言:从“手动编码”到“系统导航”的范式转移 在传统的软件工程中,人类工程师是代码的“砖瓦匠”,将大部分认知带宽消耗在每一行代码的编写与微观调试上。然而,OpenAI 最新的实践证明了一种激进的范式转移:在一个为…...
二维码生成新体验:Amazing-QR核心功能与个性化应用指南
二维码生成新体验:Amazing-QR核心功能与个性化应用指南 【免费下载链接】amazing-qr 💮 amazing QRCode generator in Python (supporting animated gif) - Python amazing 二维码生成器(支持 gif 动态图片二维码) 项目地址: ht…...
避坑指南:使用OverPy API获取OSM路网数据时常见的5个错误及解决方法
OverPy API实战避坑指南:5个高频错误与专业解决方案 当开发者第一次接触OverPy API与OpenStreetMap数据时,往往会陷入一些看似简单却影响深远的陷阱。我曾在一个城市交通分析项目中连续三天被边界框坐标顺序问题困扰,直到发现查询结果中道路片…...
从RS232到112G SerDes:高速串行接口的‘逆袭’简史与FPGA工程师的生存指南
从RS232到112G SerDes:高速串行接口的技术革命与工程师转型指南 在数字通信领域,接口技术的演进犹如一场静默的革命。二十年前,工程师们还在为并行总线的布线复杂度和时钟偏移问题头疼不已;而今天,单通道112G PAM4 Ser…...
细胞转染优化方向(一):PEI转染效率优化指南【曼博生物】
摘要:PEI转染是AAV、慢病毒及重组蛋白生产中的常用方法。本文从培养基、细胞状态、密度及质粒质量等关键因素出发,系统总结影响PEI转染效率的核心参数及优化思路。 关键词:PEI转染、AAV生产、细胞转染优化、细胞密度、培养基选择、质粒质量一…...
Python调用SM9国密库的7个致命陷阱:92%开发者踩过的坑,现在修复还来得及
第一章:SM9国密算法原理与Python生态适配全景SM9是国家密码管理局发布的基于标识的密码算法标准(GB/T 38635.1—2020),采用双线性对构造,支持无需数字证书的签名、密钥协商与加密功能,其安全性依赖于椭圆曲…...
如何用OpenRocket实现专业火箭仿真?从设计到发射的全流程指南
如何用OpenRocket实现专业火箭仿真?从设计到发射的全流程指南 【免费下载链接】openrocket Model-rocketry aerodynamics and trajectory simulation software 项目地址: https://gitcode.com/GitHub_Trending/op/openrocket 在航空航天工程领域,…...
