34 Opencv 自定义角点检测
文章目录
- cornerEigenValsAndVecs
- cornerMinEigenVal
- 示例
cornerEigenValsAndVecs
void cornerEigenValsAndVecs(InputArray src, --单通道输入8位或浮点图像OutputArray dst, --输出图像,同源图像或CV_32FC(6)int blockSize, --邻域大小值int apertureSize, --Sobel算子当中的核大小int borderType=BORDER_DEFAULT --像素外插方法
)//对应于Harris
cornerMinEigenVal
void cornerMinEigenVal(InputArray src, --单通道输入8位或浮点图像OutputArray dst, --图像存储的最小特征值。类型为CV_32FC1int blockSize, --邻域大小值int apertureSize=3, --Sobel算子的参数int borderType=BORDER_DEFAULT --像素外插方法
}//对应Shi-Tomasi
示例
#include <opencv2/opencv.hpp> // 包含OpenCV库的头文件
#include <iostream> // 包含标准输入输出流库#include <math.h> // 包含数学函数库
using namespace cv; // 使用cv命名空间,以避免每次调用OpenCV函数时都要写cv::
using namespace std; // 使用std命名空间,以便使用cout, cin等函数const char* harris_win = "Custom Harris Corners Detector"; // 定义Harris角点检测结果窗口名称
const char* shitomasi_win = "Custom Shi-Tomasi Corners Detector"; // 定义Shi-Tomasi角点检测结果窗口名称
Mat src, gray_src; // 声明源图像和灰度图变量// Harris角点响应相关的矩阵及最大最小响应值
Mat harris_dst, harrisRspImg;
double harris_min_rsp;
double harris_max_rsp;// Shi-Tomasi角点响应相关的矩阵及最大最小响应值
Mat shiTomasiRsp;
double shitomasi_max_rsp;
double shitomasi_min_rsp;int sm_qualitylevel = 30; // Shi-Tomasi质量级别初始值
int qualityLevel = 30; // Harris质量级别初始值
int max_count = 100; // 滑动条的最大值void CustomHarris_Demo(int, void*); // 声明Harris角点检测回调函数
void CustomShiTomasi_Demo(int, void*);// 声明Shi-Tomasi角点检测回调函数int main(int argc, char** argv) {src = imread("D:/vcprojects/images/home.jpg"); // 读取图片到src Mat对象中if (src.empty()) { // 检查是否成功加载图片printf("could not load image...\n");return -1;}namedWindow("input image", CV_WINDOW_AUTOSIZE); // 创建一个名为"input image"的窗口imshow("input image", src); // 在该窗口中显示原始图像cvtColor(src, gray_src, COLOR_BGR2GRAY); // 将BGR格式的src转换为灰度图gray_src// 计算特征值(Harris角点)int blockSize = 3; // 邻域大小int ksize = 3; // Sobel算子的孔径参数double k = 0.04; // Harris公式中的自由参数kharris_dst = Mat::zeros(src.size(), CV_32FC(6)); // 初始化用于存储特征值和向量的矩阵harrisRspImg = Mat::zeros(src.size(), CV_32FC1); // 初始化用于存储Harris响应值的矩阵cornerEigenValsAndVecs(gray_src, harris_dst, blockSize, ksize, 4); // 计算每个像素处的特征值和特征向量// 计算Harris响应值for (int row = 0; row < harris_dst.rows; row++) {for (int col = 0; col < harris_dst.cols; col++) {double lambda1 = harris_dst.at<Vec6f>(row, col)[0]; // 获取第一个特征值double lambda2 = harris_dst.at<Vec6f>(row, col)[1]; // 获取第二个特征值harrisRspImg.at<float>(row, col) = lambda1 * lambda2 - k * pow((lambda1 + lambda2), 2); // 计算Harris响应值}}minMaxLoc(harrisRspImg, &harris_min_rsp, &harris_max_rsp, 0, 0, Mat()); // 找到响应值中的最大最小值namedWindow(harris_win, CV_WINDOW_AUTOSIZE); // 创建一个用于显示Harris角点检测结果的窗口createTrackbar("Quality Value:", harris_win, &qualityLevel, max_count, CustomHarris_Demo); // 创建滑块以调整质量级别CustomHarris_Demo(0, 0); // 初始调用回调函数// 计算最小特征值(Shi-Tomasi角点)shiTomasiRsp = Mat::zeros(src.size(), CV_32FC1); // 初始化用于存储Shi-Tomasi响应值的矩阵cornerMinEigenVal(gray_src, shiTomasiRsp, blockSize, ksize, 4); // 计算每个像素处的最小特征值minMaxLoc(shiTomasiRsp, &shitomasi_min_rsp, &shitomasi_max_rsp, 0, 0, Mat()); // 找到响应值中的最大最小值namedWindow(shitomasi_win, CV_WINDOW_AUTOSIZE); // 创建一个用于显示Shi-Tomasi角点检测结果的窗口createTrackbar("Quality:", shitomasi_win, &sm_qualitylevel, max_count, CustomShiTomasi_Demo); // 创建滑块以调整质量级别CustomShiTomasi_Demo(0, 0); // 初始调用回调函数waitKey(0); // 等待按键事件return 0;
}// Harris角点检测回调函数:根据用户设定的质量级别绘制角点
void CustomHarris_Demo(int, void*) {if (qualityLevel < 10) { // 设定最低质量级别qualityLevel = 10;}Mat resultImg = src.clone(); // 复制原始图像用于绘制角点float t = harris_min_rsp + (((double)qualityLevel) / max_count) * (harris_max_rsp - harris_min_rsp); // 根据质量级别计算阈值for (int row = 0; row < src.rows; row++) {for (int col = 0; col < src.cols; col++) {float v = harrisRspImg.at<float>(row, col); // 获取当前像素的Harris响应值if (v > t) { // 如果响应值大于阈值,则认为是角点circle(resultImg, Point(col, row), 2, Scalar(0, 0, 255), 2, 8, 0); // 在图像上绘制红色圆圈标记角点}}}imshow(harris_win, resultImg); // 显示带有角点标记的图像
}// Shi-Tomasi角点检测回调函数:根据用户设定的质量级别绘制角点
void CustomShiTomasi_Demo(int, void*) {if (sm_qualitylevel < 20) { // 设定最低质量级别sm_qualitylevel = 20;}Mat resultImg = src.clone(); // 复制原始图像用于绘制角点float t = shitomasi_min_rsp + (((double)sm_qualitylevel) / max_count) * (shitomasi_max_rsp - shitomasi_min_rsp); // 根据质量级别计算阈值for (int row = 0; row < src.rows; row++) {for (int col = 0; col < src.cols; col++) {float v = shiTomasiRsp.at<float>(row, col); // 获取当前像素的Shi-Tomasi响应值if (v > t) { // 如果响应值大于阈值,则认为是角点circle(resultImg, Point(col, row), 2, Scalar(0, 0, 255), 2, 8, 0); // 在图像上绘制红色圆圈标记角点}}}imshow(shitomasi_win, resultImg); // 显示带有角点标记的图像
}
相关文章:
34 Opencv 自定义角点检测
文章目录 cornerEigenValsAndVecscornerMinEigenVal示例 cornerEigenValsAndVecs void cornerEigenValsAndVecs(InputArray src, --单通道输入8位或浮点图像OutputArray dst, --输出图像,同源图像或CV_32FC(6)int blockSize, --邻域大小值int ape…...
信创技术栈发展现状与展望:机遇与挑战并存
一、引言 在信息技术应用创新(信创)战略稳步推进的大背景下,我国信创技术栈已然在诸多关键层面收获了亮眼成果,不过也无可避免地遭遇了一系列亟待攻克的挑战。信创产业作为我国达成信息技术自主可控这一目标的关键一招,…...
跟我学c++中级篇——C++中的缓存利用
一、缓存 学习过计算机知识的一般都知道缓存这个概念,大约也知道缓存是什么。但是如果是程序员,如何更好的利用缓存,可能就有很多人不太清楚了。其实缓存的目的非常简单,就是了更高效的操作数据。大家都听说过“局部性原理”&…...
二叉树_堆
目录 一. 树(非线性结构) 1.1 树的概念与结构 1.2 树的表示 二. 二叉树 2.1 二叉树的概念与结构 2.2 特殊的二叉树 2.3 二叉树的存储结构 三. 实现顺序结构的二叉树 3.1 堆的概念与结构 一. 树(非线性结构) 1.1 树的概念与结构 概念ÿ…...
word文档中有大量空白行删除不掉,怎么办?
现象: 分页之间的空白行太多了( 按回车没用。删除也删除不掉 ) 解决办法: 按ctrl a 全选这个文档右击鼠标,点击【段落】选择【换行和分页】,然后把【分页】里的选项全部勾掉,然后点击【确定】…...
python rabbitmq实现简单/持久/广播/组播/topic/rpc消息异步发送可配置Django
windows首先安装rabbitmq 点击参考安装 1、环境介绍 Python 3.10.16 其他通过pip安装的版本(Django、pika、celery这几个必须要有最好版本一致) amqp 5.3.1 asgiref 3.8.1 async-timeout 5.0.1 billiard 4.2.1 celery 5.4.0 …...
构建高性能异步任务引擎:FastAPI + Celery + Redis
在现代应用开发中,异步任务处理是一个常见的需求。无论是数据处理、图像生成,还是复杂的计算任务,异步执行都能显著提升系统的响应速度和吞吐量。今天,我们将通过一个实际项目,探索如何使用 FastAPI、Celery 和 Redis …...
永磁同步电机无速度算法--全阶滑模观测器
一、原理介绍 在采用传统滑模观测器求取电机角度时通常存在系统抖振、低通滤波器导致角度相位滞后、角度的求取等问题。针对上述问题,本文采用全阶滑模观测器,该全阶滑模观测器具有二阶低通滤波器的特性,能有效滤除反电动势中的高频噪声&…...
部署开源大模型的硬件配置全面指南
目录 第一章:理解大型模型的硬件需求 1.1 模型部署需求分析 第二章:GPU资源平台 2.1 免费GPU资源 2.1.1 阿里云人工智能PAI 2.1.2 阿里天池实验室 2.1.3 Kaggle 2.1.4 Google Colab 2.2 付费GPU服务 2.2.1 AutoDL 2.2.2 Gpushare Cloud 2.2.3 Featurize 2.2.4 A…...
三、使用langchain搭建RAG:金融问答机器人--检索增强生成
经过前面2节数据准备后,现在来构建检索 加载向量数据库 from langchain.vectorstores import Chroma from langchain_huggingface import HuggingFaceEmbeddings import os# 定义 Embeddings embeddings HuggingFaceEmbeddings(model_name"m3e-base")#…...
Day13 用Excel表体验梯度下降法
Day13 用Excel表体验梯度下降法 用所学公式创建Excel表 用Excel表体验梯度下降法 详见本Day文章顶部附带资源里的Excel表《梯度下降法》,可以对照表里的单元格公式进行理解,还可以多尝试几次不同的学习率 η \eta η来感受,只需要更改学习率…...
计算机组成原理的学习笔记(5)--数据的表示与运算·其四 浮点数的储存和加减/内存对齐/大端小端
学习笔记 前言 本文主要是对于b站尚硅谷的计算机组成原理的学习笔记,仅用于学习交流。 1. 浮点数的表示与运算 规格化数: 浮点数的存储格式为 ,其中: 为符号位。 为尾数,通常在0和1之间(规格化形式为1.xx…...
华为IPD流程6大阶段370个流程活动详解_第二阶段:计划阶段 — 86个活动
华为IPD流程涵盖了产品从概念到上市的完整过程,各阶段活动明确且相互衔接。在概念启动阶段,产品经理和项目经理分析可行性,PAC评审后成立PDT。概念阶段则包括产品描述、市场定位、投资期望等内容的确定,同时组建PDT核心组并准备项目环境。团队培训涵盖团队建设、流程、业务…...
如何使用 Flask 框架创建简单的 Web 应用?
Flask是一个轻量级的Web应用框架,用Python编写,非常适合快速开发和原型设计。 它提供了必要的工具和技术来构建一个Web应用,同时保持核心简单,不强制使用特定的工具或库。 二、创建第一个Flask应用 安装Flask 首先,…...
将Minio设置为Django的默认Storage(django-storages)
这里写自定义目录标题 前置说明静态文件收集静态文件 使用django-storages来使Django集成Minio安装依赖settings.py测试收集静态文件测试媒体文件 前置说明 静态文件 Django默认的Storage是本地,项目中的CSS、图片、JS都是静态文件。一般会将静态文件放到一个单独…...
sed | 一些关于 sed 的笔记
sed 总结 sed 语法sed [-hnV] [-e<script>] [-f<script文件>] [文本文件]--- 参数:-e<script> 以选项中指定的script 来处理输入的文本文件-f<script文件> 以选项中指定的script 文件来处理输入的文本文件-n 禁用 pattern space 的默认输出…...
wtforms+flask_sqlalchemy在flask-admin视图下实现日期的修改与更新
背景: 在flask-admin 的modelview视图下实现自定义视图的表单修改/编辑是件不太那么容易的事情,特别是想不自定义前端view的情况下。 材料: wtformsflask_sqlalchemy 制作: 上代码 1、模型代码 from .exts import db from …...
AI的进阶之路:从机器学习到深度学习的演变(三)
(承接上集:AI的进阶之路:从机器学习到深度学习的演变(二)) 四、深度学习(DL):机器学习的革命性突破 深度学习(DL)作为机器学习的一个重要分支&am…...
thinkphp 多选框
视图 <div class"form-group"><label for"c-flag" class"control-label col-xs-12 col-sm-2 col-md-4">{:__(Flag)}</label><div class"col-xs-12 col-sm-8 col-md-8"><!--formatter:off--><select …...
机器学习《西瓜书》学习笔记《待续》
如果说,计算机科学是研究关于“算法”的学问,那么机器学习就是研究关于“学习算法”的学问。 目录 绪论引言基本术语 扩展向量的张成-span使用Markdown语法编写数学公式希腊字母的LaTex语法插入一些数学的结构插入定界符插入一些可变大小的符号插入一些函…...
从零开始玩转translategemma-27b-it:Ollama环境搭建与提示词详解
从零开始玩转translategemma-27b-it:Ollama环境搭建与提示词详解 1. 环境准备与快速部署 想要体验强大的图文翻译能力,首先需要搭建好运行环境。translategemma-27b-it是一个基于Ollama部署的翻译模型,支持文本和图片的翻译功能。 1.1 系统…...
河海大学材料科学与工程及材料与化工专业考研复试资料(含《材料分析方法》笔试专项)
温馨提示:文末有联系方式河海大学材料类考研复试资料全面升级 本套资料专为报考河海大学材料科学与工程、材料与化工两个硕士专业的考生设计,聚焦复试核心笔试科目——《材料分析方法》,助力精准高效备考。由2025届一志愿录取考生权威整理 所…...
Phi-3-mini-4k-instruct-gguf多场景落地:跨境电商多语言商品描述批量生成
Phi-3-mini-4k-instruct-gguf多场景落地:跨境电商多语言商品描述批量生成 1. 跨境电商的痛点与解决方案 跨境电商卖家每天面临的最大挑战之一,就是为同一款商品准备不同语言版本的描述。传统做法要么需要雇佣多语种文案人员,要么使用机械的…...
Calypso vs PC-DMIS:三坐标两大软件脱机编程实战对比与选型指南
Calypso vs PC-DMIS:三坐标测量软件脱机编程深度对比与实战选型策略 在精密制造领域,三坐标测量机(CMM)的脱机编程能力直接决定了检测效率与资源利用率。作为行业两大标杆,蔡司Calypso与海克斯康PC-DMIS在用户界面设计、编程逻辑、仿真验证等…...
【卷积神经网络作业实现人脸的关键点定位功能】
下面是完成这道题目的代码:import os import cv2 import numpy as np import pandas as pd import torch import torch.nn as nn from torch.utils.data import Dataset,DataLoader from torchvision import transforms import matplotlib.pyplot as plt1. 数据集定…...
避坑指南:Matplotlib调用LaTeX渲染公式时,你可能会遇到的5个报错及解决方法
Matplotlib与LaTeX公式渲染:5个典型报错排查手册 当你第一次在Matplotlib中启用usetexTrue时,屏幕上突然弹出的红色LaTeX错误信息往往让人手足无措。这不是你代码逻辑的问题,而是两个强大工具在握手时产生的"语言障碍"。本文将带你…...
电路板焊接缺陷解析与预防指南
1. 电路板焊接缺陷全解析作为一名硬件工程师,焊接就像吃饭喝水一样是必备技能。但即使是最资深的工程师,也难免会遇到各种焊接问题。今天我就结合自己多年的实战经验,为大家详细剖析16种最常见的焊接缺陷,从外观特征到成因分析&am…...
物理信息机器学习新突破!连中SCI一区TOP刊!
小伙伴们好,我是小嬛。专注于人工智能、计算机视觉、AI大模型领域相关分享研究。【目标检测、图像分类、图像分割、目标跟踪等项目都可做,相关领域论文辅导也可以找我;需要的可联系(备注来意)】-------正文开始-------…...
【Windows】终止进程、杀掉进程、结束进程
使用资源监视器在任务管理器中点击"性能"选项卡点击"打开资源监视器"切换到"CPU"选项卡在"关联的句柄"搜索框中输入 ui_demo.exe找到对应的进程后,右键点击并选择"结束进程"...
Phi-4-mini-reasoning入门指南:用Gradio Blocks构建多步解题UI
Phi-4-mini-reasoning入门指南:用Gradio Blocks构建多步解题UI 1. 认识Phi-4-mini-reasoning Phi-4-mini-reasoning是一款3.8B参数的轻量级开源模型,专为数学推理、逻辑推导和多步解题等强逻辑任务设计。这个模型主打"小参数、强推理、长上下文、…...
