码迷,mamicode.com
首页 > 其他好文 > 详细

OpenCv基础_三

时间:2021-02-08 11:57:14      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:窗口   阈值   col   image   code   像素   使用   图像   数据   

Harris角点检测

 

技术图片

  • 理解

    内部点:蓝框所示,无论滑动窗口水平滑动还是竖直滑动,框内像素值都不会发生大的变化

    边界点:黑框所示,滑动窗口沿着某一个方向滑动框内像素点不会发生大的改变,但是沿着另一个方向滑动,就会发生大的改变

    角点:红框所示,滑动窗口沿着两个方向滑动,框内像素点都会发生大的变化

 

    两个方向上的特性值分别为λ1,λ2,

技术图片

    当 λ1,λ2,都很小, |R|也很小时,表示是内部区域

    当 λ1,λ2,一个大一个小,R<0时,表示是边界区域

    当 λ1,λ2,都很大,R也很大时,表示是角点

  •  函数

    Open 中的函数 cv2.cornerHarris() 可以用来进行角点检测

    参数
    ? img - 数据类型为 float32 的输入图像。
    ? blockSize - 角点检测中要考虑的领域大小。
    ? ksize - Sobel 求导中使用的窗口大小
    ? k - Harris 角点检测方程中的自由参数,取值参数为 [0,04,0.06].

    返回值

    R值构成的灰度图像,灰度图像坐标会与原图像对应,R值就是角点分数当R值很大的时候 就可以认为这个点是一个角点

  • 步骤

1.图片转化为灰度图

2. cv2.cornerHarris() 处理的是float32,注意类型转换

3.利用 cv2.cornerHarris()得到R集合

4.把R中大于某个阈值的判定为角点,

img[dst>0.01*dst.max()] = [0,0,255]

这里R矩阵是一个很大的值,取里面最大的R,只要dst里面的值大于0.01R的最大值
那么此时这个dst的R值也是很大的 可以判定他为角点

 

import cv2
import numpy as np

def cv_show(name,img):
    cv2.imshow(name,img)
    cv2.waitKey(0)
    cv2.destroyAllWindows()

img = cv2.imread(chess.jpg)
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
gray = np.float32(gray)
dst = cv2.cornerHarris(gray,2,3,0.04)

img[dst>0.01*dst.max()] = [0,0,255]
cv_show(img,img)

 

技术图片

 

OpenCv基础_三

标签:窗口   阈值   col   image   code   像素   使用   图像   数据   

原文地址:https://www.cnblogs.com/empolder-minoz/p/14382810.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!