《学习opencv》读书笔记及python实现(1)

opencv是2000年由Intel公司开源、并持续维护的项目,且该项目允许利用opencv的代码生成商业产品。因此,opencv也被广泛应用与人机互动、物体识别、图像分割、人脸识别、动作识别、运动跟踪、机器人、运动分析、机器视觉、结构分析、汽车安全驾驶。但是,由于opencv实际上是一个c函数库,基于opencv的应用大多使用c++开发。市面上仅有几种介绍opencv的中文资料也是基于C++实现。笔者希望通过尝试使用python调用opencv,以降低计算机视觉相关应用开发的门槛。

1.应用一 图像匹配

做图像匹配是基于特征识别,特征识别是基于特征点的识别,所谓特征点又称兴趣点、关键点。其中,角点是图像中最基本的一种关键点,它是由图像中一些几何结构的关节点构成,很多都是线条之间产生的交点。Harris角点是一类比较经典的角点类型,它的基本原理是计算图像中每点与周围点变化率的平均值。
(1) 这里写图片描述
(2)这里写图片描述
其中I(x+u,y+u)代表了点(x,y)邻域点的灰度值。通过变换可以将上式变化为一个协方差矩阵求特征值的问题(2),具体数学原理本文不过多描述。
1.1Harris角点检测
在opencv Harris角点检测是的函数为cornerHairrs(),但是它的输出是一幅浮点值图像,浮点值越高,表明越可能是特征角点,我们需要对图像进行阈值化。
cv2.cornerHarris()对应参数如下:
img -数据类型为float32的输入图像。
blockSize-角点检测中要考虑的领域大小。
ksize-Sobel求导中使用的窗口大小。
k-Harris角点检测方程中的自由参数,取值参数[0.04,0.06]

import cv2
import numpy as np

filename='C:\\workspace\\test.jpg'
img=cv2.imread(filename)
gray=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
gray=np.float32(gray)
dst=cv2.cornerHarris(gray,2,3,0.04)
dst=cv2.dilate(dst,None)
img[dst>0.01*dst.max()]=[0,0,255]
cv2.imshow('dst',img)
if cv2.waitKey(0)&0xff==27:
    cv2.destroyAllWindows()

这里写图片描述
这里写图片描述

图中红点即为角点,角点基本上能反映图像轮廓的变化,根据变化可进一步进行图像的匹配,判断是否为同一图,进而可判断图中物体是否移动、变动。

未完待续……

转载请注明原创地址

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值