主页 > 知识库 > OpenCV半小时掌握基本操作之角点检测

OpenCV半小时掌握基本操作之角点检测

热门标签:呼叫中心市场需求 美图手机 智能手机 检查注册表项 银行业务 网站文章发布 铁路电话系统 服务器配置

概述

OpenCV 是一个跨平台的计算机视觉库, 支持多语言, 功能强大. 今天小白就带大家一起携手走进 OpenCV 的世界.

角点检测

角点检测 (Corner Detection) 是图像的重要特征. 角点可以帮助我们实现图像对其, 图像拼接, 目标识别等等重要用途.

Harris 角点检测 (Harris Corner Detection) 是最基础也是最重要的一种角点检测算法. 通过计算图像在 x, y 上平移的自相似性 (Self-Similarity) 来判断图像是否为角点.

例如: 某图像的某个位置在 x / y 方向上做微小的滑动, 如果窗口内的灰度值都有较大变换, 那么这个位置就是角点.

角点检测代码

格式:

cv2.cornerHarris(src, blockSize, ksize, k, dst=None, borderType=None)

参数:

  • scr: 输入图像
  • blockSize: 焦点检测中指定区域的大小
  • ksize: Sobel 求导中使用的窗口大小
  • ksize: Sobel 孔径参数, 取值范围为 [0.04, 0.06]

例1 :

import numpy as np
import cv2

# 读取图片
image = cv2.imread("house.jpg")

# 转换成灰度图
image_gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

# harris角点检测
harris = cv2.cornerHarris(image_gray, 2, 3, 0.04)

# 阈值转换原图
image_corner = image.copy()
image_corner[harris > 0.01 * harris.max()] = [0, 0, 255]

# 整合
combine = np.hstack((image, image_corner))

# 图片展示
cv2.imshow("origional vs corner detection", combine)
cv2.waitKey(0)
cv2.destroyAllWindows()

# 保存结果
cv2.imwrite("harris.jpg", combine)

输出结果:

例 2:

import numpy as np
import cv2

# 读取图片
image = cv2.imread("house2.jpg")

# 转换成灰度图
image_gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

# harris角点检测
harris = cv2.cornerHarris(image_gray, 2, 3, 0.04)

# 阈值转换原图
image_corner = image.copy()
image_corner[harris > 0.1 * harris.max()] = [0, 0, 255]

# 整合
combine = np.hstack((image, image_corner))

# 图片展示
cv2.imshow("origional vs corner detection", image_corner)
cv2.waitKey(0)
cv2.destroyAllWindows()

# 保存结果
cv2.imwrite("harris.jpg", combine)

输出结果:

到此这篇关于OpenCV半小时掌握基本操作之角点检测的文章就介绍到这了,更多相关OpenCV角点检测内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
  • OpenCV特征提取与检测之Shi-Tomasi角点检测器
  • OpenCV特征提取与检测之Harris角点检测
  • python opencv角点检测连线功能的实现代码
  • OpenCV哈里斯(Harris)角点检测的实现

标签:沧州 新疆 乐山 沈阳 河南 红河 长治 上海

巨人网络通讯声明:本文标题《OpenCV半小时掌握基本操作之角点检测》,本文关键词  ;如发现本文内容存在版权问题,烦请提供相关信息告之我们,我们将及时沟通与处理。本站内容系统采集于网络,涉及言论、版权与本站无关。
  • 相关文章
  • 收缩
    • 微信客服
    • 微信二维码
    • 电话咨询

    • 400-1100-266