32 OpenCV Harris角点检测

文章目录

  • cornerHarris 算子
  • 示例

角点检测

cornerHarris 算子

void cv::cornerHarris ( InputArray  src,OutputArray dst,int  blockSize,int ksize,double K,int borderType = BORDER_DEFAULT)
src:待检测Harris角点的输入图像,图像必须是CV 8U或者CV 32F的单通道灰度图像
dst: 存放Harris评价系数的R矩阵,数据类型为CV 32F的单通道图像,与输入图像具有相同的尺寸
blockSize:邻域大小
ksize: Sobel算子的半径,用于得到梯度信息   
k:计算Harris评价系数R的权重系数
borderType:像素外推算法标志

示例

#include <opencv2/opencv.hpp>
#include <iostream>

using namespace cv;
using namespace std;

// 声明全局变量,用于存储输入图像和处理后的图像,以及阈值和最大阈值计数。
Mat src, gray_src;
int thresh = 130;
int max_count = 255;

// 定义输出窗口的标题。
const char* output_title = "HarrisCornerDetection Result";

// 执行Harris角点检测并显示结果的函数。
void Harris_Demo(int, void*);

int main(int argc, char** argv) {
    // 加载输入图像。
	src = imread("D:/vcprojects/images/home.jpg");
	if (src.empty()) {
		printf("无法加载图像...\n");
		return -1;
	}

    // 在窗口中显示输入图像。
	namedWindow("输入图像", CV_WINDOW_AUTOSIZE);
	imshow("输入图像", src);

    // 创建窗口以显示Harris角点检测结果。
	namedWindow(output_title, CV_WINDOW_AUTOSIZE);

    // 将输入图像转换为灰度图像。
	cvtColor(src, gray_src, COLOR_BGR2GRAY);

    // 创建一个滑动条,用于交互式调整阈值值。
	createTrackbar("阈值:", output_title, &thresh, max_count, Harris_Demo);

    // 首先执行Harris角点检测。
	Harris_Demo(0, 0);

    // 无限等待按键。
	waitKey(0);
	return 0;
}

// 执行Harris角点检测的函数。
void Harris_Demo(int, void*) {
    // 初始化变量,用于存储Harris角点检测的输出。
	Mat dst, norm_dst, normScaleDst;

    // 初始化Harris角点检测算法的参数。
	int blockSize = 2;
	int ksize = 3;
	double k = 0.04;

    // 将Harris角点检测算法应用于灰度输入图像。
	cornerHarris(gray_src, dst, blockSize, ksize, k, BORDER_DEFAULT);

    // 将输出归一化到范围[0, 255]。
	normalize(dst, norm_dst, 0, 255, NORM_MINMAX, CV_32FC1, Mat());

    // 将归一化输出转换为8位无符号整数。
	convertScaleAbs(norm_dst, normScaleDst);

    // 创建输入图像的副本,在其上绘制检测到的角点。
	Mat resultImg = src.clone();

    // 遍历归一化输出中的每个像素。
	for (int row = 0; row < resultImg.rows; row++) {
		//获取 normScaleDst 图像的第 row 行的指针,这样就可以通过该指针访问该行的像素值
		uchar* currentRow = normScaleDst.ptr(row);
		for (int col = 0; col < resultImg.cols; col++) {
            // 获取当前像素的值。
			int value = (int)*currentRow;
            // 如果值超过阈值,则在相应位置绘制一个圆圈。
			if (value > thresh) {
				circle(resultImg, Point(col, row), 2, Scalar(0, 0, 255), 2, 8, 0);
			}
            // 移动到行中的下一个像素。
			currentRow++;
		}
	}

    // 显示带有检测到的角点的结果图像。
	imshow(output_title, resultImg);
}

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

玩comfyui踩过的坑之使用ComfyUI_Custom_NODES_ALEKPET翻译组件问题

环境&#xff1a; 秋叶安装包&#xff0c;安装ComfyUI_Custom_NODES_ALEKPET组件或者直接下载网盘中的包&#xff0c;直接解压包到comfyui根目录/custom_nodes/&#xff0c;重启后&#xff0c;按指导文件操作。 注意&#xff1a;网盘指导包中有配置好的流程json文件&#xff0…

【源码】 频裂变加群推广强制分享引流源码

视频裂变加群推广强制分享引流源码&#xff0c;用户达到观看次数后需要分享给好友或者群,好友必须点击推广链接后才会增加观看次数。 引导用户转发QV分享,达到快速裂变引流的效果&#xff01; 视频裂变推广程序&#xff0c;强制分享链接&#xff0c;引导用户转发&#xff0c;…

prometheus搭建

1.prometheus下载 下载地址:Download | Prometheus 请下载LTS稳定版本 本次prometheus搭建使用prometheus-2.37.1.linux-amd64.tar.gz版本 2.上传prometheus-2.37.1.linux-amd64.tar.gz至服务器/opt目录 CentOS7.9 使用命令rz -byE上传 3.解压缩prometheus-2.37.1.linux…

VscodeC/C++环境配置

引言 vscode是一款非常好用的编辑器&#xff0c;集成了大量的插件&#xff0c;具有很高的自由度&#xff0c;因此广受大家的喜爱。但是他本身是不带编译器的&#xff0c;因此如果要使用vscode来编译C/C程序的话&#xff0c;我们需要额外安装编译器并且为vscode配上环境。 编译…

Docker 入门与实践:从零开始构建容器化应用环境

Docker 一、docker常用命令docker ps 格式化输出Linux设置命令别名 二、数据卷相关命令挂载到默认目录&#xff08;/var/lib/docker&#xff09;挂载到本地目录 三、自定义镜像Dockerfile构建镜像的命令 四、网络自定义网络 五、DockerCompose相关命令 一、docker常用命令 dock…

Python | Leetcode Python题解之第71题简化路径

题目&#xff1a; 题解&#xff1a; class Solution:def simplifyPath(self, path: str) -> str:names path.split("/")stack list()for name in names:if name "..":if stack:stack.pop()elif name and name ! ".":stack.append(name)re…

ThreeJS:光线投射与3D场景交互

光线投射Raycaster 光线投射详细介绍可参考&#xff1a;https://en.wikipedia.org/wiki/Ray_casting&#xff0c; ThreeJS中&#xff0c;提供了Raycaster类&#xff0c;用于进行鼠标拾取&#xff0c;即&#xff1a;当三维场景中鼠标移动时&#xff0c;利用光线投射&#xff0c;…

点亮一个LED

新建项目 #include <REGX52.H>void main() {P2 0xFE;while(1){} }调整字体大小 在编译之前要勾选一个东西,不然scp读取不了 去stc-isp中烧录进51单片机 两个地方要勾选,一个是单片机型号,一个是串口号,我的单片机型号不是江科大视频里面那个型号,所以不能按视频里面来选…

【数据结构(邓俊辉)学习笔记】列表04——排序器

文章目录 0. 统一入口1. 选择排序1.1 构思1.2 实例1.3 实现1.4 复杂度 2. 插入排序2.1 构思2.2 实例2.3 实现2.4 复杂度分析2.5 性能分析 3. 归并排序3.1 二路归并算法3.1.1 二路归并算法原理3.1.2 二路归并算法实现3.1.3 归并时间 3.2 分治策略3.2.1 实现3.2.2 排序时间 4. 总…

学习笔记:【QC】Android Q - IMS 模块

一、IMS init 流程图 二、IMS turnon 流程图 三、分析说明 1、nv702870 不创建ims apn pdp 2、nv702811 nv702811的时候才创建ims pdp&#xff1a; ims pdp 由ims库发起&#xff0c;高通没有开放这部分代码&#xff1a; 10-10 11:45:53.027 943 943 E Diag_Lib: [IMS_D…

只用语音能训练出AI大模型吗?就像训练会说话但不识字的人一样

AI语音对话技术通常是基于语音识别和自然语言处理&#xff08;NLP&#xff09;的。在这个过程中&#xff0c;语音首先被识别成文字&#xff0c;然后NLP技术对这些文字进行处理&#xff0c;生成回应。然而&#xff0c;我们是否可以直接训练一个“文盲”大模型&#xff0c;即只用…

45. UE5 RPG 增加角色受击反馈

在前面的文章中&#xff0c;我们实现了对敌人的属性的初始化&#xff0c;现在敌人也拥有的自己的属性值&#xff0c;技能击中敌人后&#xff0c;也能够实现血量的减少。 现在还需要的就是在技能击中敌人后&#xff0c;需要敌人进行一些击中反馈&#xff0c;比如敌人被技能击中后…

深度学习中的注意力机制二(Pytorch 16)

一 Bahdanau 注意力 通过设计一个 基于两个循环神经网络的编码器‐解码器架构&#xff0c;用于序列到序列学习。具体来说&#xff0c;循环神经网络编码器将长度可变的序列转换为固定形状的上下文变量&#xff0c;然后循环神经网络 解码器根据生成的词元和上下文变量按词元生成…

meshlab: pymeshlab计算两个模型的布尔交集(mesh boolean intersection)

一、关于环境 请参考&#xff1a;pymeshlab遍历文件夹中模型、缩放并导出指定格式-CSDN博客 二、关于代码 本文所给出代码仅为参考&#xff0c;禁止转载和引用&#xff0c;仅供个人学习。 本案例以两个圆环为例。 左侧为两个圆环&#xff0c;右上是重叠&#xff0c;右下是圆…

引流源码短剧搜索前端源码+内附搜索API

引流源码短剧搜索前端源码内附搜索API&#xff0c;全网短剧搜索前端源码分享&#xff0c;文末附API及使用详解 内含7000短剧资源(不支持在线播放&#xff09;&#xff0c;毕竟搞在线播放挺烧钱的[阴险] 源码直接上传虚拟主机或服务器即可使用&#xff0c;无需其他配置&#x…

jvm 马士兵 01 JVM简介,class文件结构

01.JVM是什么 JVM是一个跨平台的标准 JVM只识别class文件&#xff0c;符合JVM规范的class文件都可以被识别 u1 是一个字节 u2是两个字节

使用网络用户命令行工具的/passwordreq:yes

提示:"新建域时&#xff0c;本地administrator帐户将成为域administrator账户。无法新建域&#xff0c;因为本地administrator账户密码不符合要求。 目前&#xff0c;本地administrator账户不需要密码。我们建议您使用网络用户命令行工具的/passwordreq:yes选项获得该账户…

AI图书推荐:ChatGPT在真实商业世界中的应用

《ChatGPT在真实商业世界中的应用》 (Unleashing The Power of ChatGPT: A Real World Business Applications)首先概述了ChatGPT及其在对话式人工智能领域的影响。接着&#xff0c;你将深入了解ChatGPT的技术方面&#xff0c;理解机器学习算法和自然语言处理如何在后台工作。然…

鸿蒙ArkTs开发,仿抖音个人中心header 下拉放大

如果是iOS 或者android 上实现&#xff0c;可以用Scollview 的contentOffset 来实现&#xff0c;然而在鸿蒙ets中该如何实现&#xff1f;废话不多说开始撸代码 第一步、实现一个header // 创建header&#xff0c;准备一张背景图片BuilderHeaderBuilder(){Column() {Row() {Ima…

社交媒体数据恢复:爱聊

爱聊数据恢复方法 在爱聊的使用过程中&#xff0c;如果遇到数据丢失的情况&#xff0c;可以尝试以下几种方法来恢复数据。 1. 硬盘坏道检测与修复 如果问题是由于硬盘坏道导致的&#xff0c;可以按照以下步骤进行操作&#xff1a; 找到需要修复的坏道磁盘&#xff1a;首先&…