opencv基础教程(唐宇迪)--03

import cv2 as cv
import numpy as np

# 图像金字塔(下采样--缩小;上采样--放大)
'''
img_up = cv.pyrUp(img)  # 1.将图像与高斯内核卷积;2.将所有偶数行和列去掉
img_down = cv.pyrDown(img)  # 1.将原图每个方向扩为原先两倍,用零填充;2.将放大后图像与高斯内核卷积,获得近似值
'''

# 拉普拉斯金字塔(滤波--缩小尺寸--放大尺寸--原图与新图相减)
'''
down = cv.pyrDown(img)
down_up = cv.pyrUp(down)
l_1 = img - down_up
'''

# 图像轮廓(为提高准确率,建议使用二值图像)
'''
# model参数(检测轮廓的方法)--cv.RETR_TREE:检索所有的轮廓,并重构嵌套轮廓的整个层次
# method参数(表示轮廓的方法)--cv.CHAIN_APPROX_NONE:把轮廓上的所有点储存;cv.CHAIN_APPROX_SIMPLE:只存储水平,垂直,对角直线的起始点
binary, contours, hierarchy = cv.findContours(img, cv.RETR_TREE, cv.CHAIN_APPROX_NONE)  #  contours:检测到的轮廓;hierarchy:各个轮廓的继承关系
draw_img = img.copy()  # 注意copy,否则原图会变
res = cv.drawContours(draw_img, contours, -1, (0, 0, 255), 2)  # 绘制图像,轮廓,轮廓索引,线条颜色,线条宽度
'''

# 轮廓特征
'''
cnt = contours[0]
cv.contourArea(cnt)  # 面积
cv.arcLength(cnt, True)  # 周长,True表示闭合的
'''

# 轮廓近似
'''
cnt = contours[0]
epsilon = 0.05 * cv.arcLength(cnt, True)  # 通常间隔阈值是通过周长的百分比进行比较
approx = cv.approxPolyDP(cnt, epsilon, True)  # 轮廓近似
draw_img = img.copy()  # 注意copy,否则原图会变
res = cv.drawContours(draw_img, [approx], -1, (0, 0, 255), 2)  # 绘制图像,轮廓,轮廓索引,线条颜色,线条宽度
'''

# 边界矩形
'''
x, y, w, h = cv.boundingRect(cnt)  # 对边界计算外接矩形
img = cv.rectangle(img, (x, y), (x+w, y+h), (0, 255, 0), 2)
'''

# 外接圆
'''
(x, y), radius = cv.minEnclosingCircle(cnt)  
center = (int(x), int(y))
radius = int(radius)
img = cv.circle(img, center, radius, (0, 255, 0), 2)
'''

# 模板匹配
'''
# cv.TM_SQDIFF_NORMED--计算归一化平方不同越接近0,越相关
# cv.TM_CCORR_NORMED--计算归一化相关性,越接近1,越相关
# cv.TM_CCOEFF_NORMED--计算归一化相关系数,越接近1,越相关
res = cv.matchTemplate(img, template, cv.TM_SQDIFF_NORMED)  # res的shape值为(原图-模板+1)
min_val, max_val, min_loc, max_loc = cv.minMaxLoc(res)  # 根据计算方法,选择左上角坐标(min_loc或max_loc)
bottom_right = min_loc[0]+template.shape[1], min_loc[1]+template.shape[0]
# 多模板匹配
threshold = 0.8
loc = np.where(res >= threshold)
for pt in zip(*loc[::-1]):
    bottom_right = pt[0]+template.shape[1], pt[1]+template.shape[0]
    cv.rectangle(img, pt, bottom_right, (0, 0, 255), 2)
'''
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值