当前位置: 首页 > wzjs >正文

网站页尾的作用百度seo排名技术必不可少

网站页尾的作用,百度seo排名技术必不可少,长沙哪里有网站推广优化,seo专员是指什么意思文章目录 1、功能描述2、原理分析3、代码实现4、效果展示5、完整代码6、涉及到的库函数7、参考 更多有趣的代码示例,可参考【Programming】 1、功能描述 基于 opencv-python 实现模板匹配算法 2、原理分析 算法流程 (1)滑动窗口 将模板图…

在这里插入图片描述

文章目录

  • 1、功能描述
  • 2、原理分析
  • 3、代码实现
  • 4、效果展示
  • 5、完整代码
  • 6、涉及到的库函数
  • 7、参考


更多有趣的代码示例,可参考【Programming】


1、功能描述

基于 opencv-python 实现模板匹配算法

在这里插入图片描述

2、原理分析

算法流程

(1)滑动窗口

将模板图像在目标图像上逐点滑动。

对于每个位置,计算模板与当前窗口区域的相似度。

(2)相似度计算

使用特定的匹配方法计算模板与当前窗口区域的相似度。

常用的匹配方法包括相关性、平方差等。

(3)结果矩阵

将每个位置的相似度值存储在结果矩阵中。

结果矩阵的大小为 (W - w + 1, H - h + 1),其中 W 和 H 是目标图像的宽和高,w 和 h 是模板图像的宽和高。

(4)最佳匹配定位

根据匹配方法,找到结果矩阵中的最大值或最小值位置。

该位置即为模板在目标图像中的最佳匹配位置。

优点

  • 实现简单,计算直观。
  • 适用于模板与目标图像具有明显相似性的场景。

缺点

  • 计算量大,对于大图像或高分辨率图像,性能较差。
  • 对尺度、旋转、光照变化敏感。
  • 可能产生多个误匹配,需要后续处理。

应用场景

  • 图像识别:在图像中定位特定对象或标志。
  • 目标检测:检测图像中的特定模式或形状。
  • 工业检测:在生产线中检测产品缺陷或特定部件。
  • 视频跟踪:在视频序列中跟踪特定对象。

改进与优化

  • 多尺度匹配:结合图像金字塔技术,在不同尺度下进行模板匹配。
  • 特征匹配:使用特征点(如 SIFT、SURF)进行匹配,提高鲁棒性。
  • 快速算法:使用快速傅里叶变换(FFT)加速相关性计算。
  • 后处理:对匹配结果进行非极大值抑制(NMS),减少误匹配。

3、代码实现

导入必要的库函数

import cv2
import time
import numpy as np

读入目标图像(Input Image),转换为灰度图,读入模板图像(Template Image),以灰度图模式读取

配置匹配置信度相关参数

img_rgb = cv2.imread('1.jpg')  # 需要检测的图片
img_gray = cv2.cvtColor(img_rgb, cv2.COLOR_BGR2GRAY)  # 转化成灰色
template_img = cv2.imread('4.jpg', 0)  # 模板小图
template_threshold = 0.8  # 模板置信度

调用模板匹配算法

dets = template(img_gray, template_img, template_threshold)

可视化结果,并将结果保存

    for coord in dets:cv2.rectangle(img_rgb, (int(coord[0]), int(coord[1])), (int(coord[2]), int(coord[3])), (0, 0, 255), 2)cv2.imwrite("result4.jpg", img_rgb)

下面看看 template 函数的实现

def template(img_gray, template_img, template_threshold, nms=False):'''img_gray:待检测的灰度图片格式template_img:模板小图,也是灰度化了template_threshold:模板匹配的置信度'''h, w = template_img.shape[:2]res = cv2.matchTemplate(img_gray, template_img, cv2.TM_CCOEFF_NORMED)start_time = time.time()loc = np.where(res >= template_threshold)  # 大于模板阈值的目标坐标score = res[res >= template_threshold]  # 大于模板阈值的目标置信度# 将模板数据坐标进行处理成左上角、右下角的格式xmin = np.array(loc[1])ymin = np.array(loc[0])xmax = xmin + wymax = ymin + hxmin = xmin.reshape(-1, 1)  # 变成n行1列维度xmax = xmax.reshape(-1, 1)  # 变成n行1列维度ymax = ymax.reshape(-1, 1)  # 变成n行1列维度ymin = ymin.reshape(-1, 1)  # 变成n行1列维度score = score.reshape(-1, 1)  # 变成n行1列维度data_hlist = []data_hlist.append(xmin)data_hlist.append(ymin)data_hlist.append(xmax)data_hlist.append(ymax)data_hlist.append(score)data_hstack = np.hstack(data_hlist)  # 将xmin、ymin、xmax、yamx、scores按照列进行拼接thresh = 0.3  # NMS里面的IOU交互比阈值if nms:keep_dets = py_nms(data_hstack, thresh)  # (203, 5)else:keep_dets = list(range(data_hstack.shape[0]))print("nms time:", time.time() - start_time)  # 打印数据处理到nms运行时间dets = data_hstack[keep_dets]  # 最终的nms获得的矩形框return dets

核心算法是调用了 res = cv2.matchTemplate(img_gray, template_img, cv2.TM_CCOEFF_NORMED)

把返回的结果改变下格式保存

经过 keep_dets = py_nms(data_hstack, thresh) 非极大值抑制算法后,输出最终的模板匹配结果

nms 的实现如下

def py_nms(dets, thresh):"""Pure Python NMS baseline."""# x1、y1、x2、y2、以及score赋值# (x1、y1)(x2、y2)为box的左上和右下角标x1 = dets[:, 0]y1 = dets[:, 1]x2 = dets[:, 2]y2 = dets[:, 3]scores = dets[:, 4]# 每一个候选框的面积areas = (x2 - x1 + 1) * (y2 - y1 + 1)# order是按照score降序排序的order = scores.argsort()[::-1]# print("order:",order)keep = []while order.size > 0:i = order[0]keep.append(i)# 计算当前概率最大矩形框与其他矩形框的相交框的坐标,会用到numpy的broadcast机制,得到的是向量xx1 = np.maximum(x1[i], x1[order[1:]])yy1 = np.maximum(y1[i], y1[order[1:]])xx2 = np.minimum(x2[i], x2[order[1:]])yy2 = np.minimum(y2[i], y2[order[1:]])# 计算相交框的面积,注意矩形框不相交时w或h算出来会是负数,用0代替w = np.maximum(0.0, xx2 - xx1 + 1)h = np.maximum(0.0, yy2 - yy1 + 1)inter = w * h# 计算重叠度IOU:重叠面积/(面积1+面积2-重叠面积)ovr = inter / (areas[i] + areas[order[1:]] - inter)# 找到重叠度不高于阈值的矩形框索引inds = np.where(ovr <= thresh)[0]# print("inds:",inds)# 将order序列更新,由于前面得到的矩形框索引要比矩形框在原order序列中的索引小1,所以要把这个1加回来order = order[inds + 1]return keep

4、效果展示

输入图片

在这里插入图片描述

模板1

在这里插入图片描述
结果

在这里插入图片描述
模板2

在这里插入图片描述

结果
在这里插入图片描述

模板3

在这里插入图片描述

结果

在这里插入图片描述

输入图片

在这里插入图片描述
模板

在这里插入图片描述

输出结果

在这里插入图片描述

变成灰度图匹配的缺点,哈哈,石头草堆也都错误匹配了

输入图片,阈值 0.6

在这里插入图片描述

模板1

在这里插入图片描述

结果

在这里插入图片描述

这就是没有角度鲁棒性的缺点

模板

在这里插入图片描述

结果

在这里插入图片描述
模板

在这里插入图片描述

结果

在这里插入图片描述
阈值设置的低 0.6,不管炮口的朝向了

5、完整代码

import cv2
import time
import numpy as npdef py_nms(dets, thresh):"""Pure Python NMS baseline."""# x1、y1、x2、y2、以及score赋值# (x1、y1)(x2、y2)为box的左上和右下角标x1 = dets[:, 0]y1 = dets[:, 1]x2 = dets[:, 2]y2 = dets[:, 3]scores = dets[:, 4]# 每一个候选框的面积areas = (x2 - x1 + 1) * (y2 - y1 + 1)# order是按照score降序排序的order = scores.argsort()[::-1]# print("order:",order)keep = []while order.size > 0:i = order[0]keep.append(i)# 计算当前概率最大矩形框与其他矩形框的相交框的坐标,会用到numpy的broadcast机制,得到的是向量xx1 = np.maximum(x1[i], x1[order[1:]])yy1 = np.maximum(y1[i], y1[order[1:]])xx2 = np.minimum(x2[i], x2[order[1:]])yy2 = np.minimum(y2[i], y2[order[1:]])# 计算相交框的面积,注意矩形框不相交时w或h算出来会是负数,用0代替w = np.maximum(0.0, xx2 - xx1 + 1)h = np.maximum(0.0, yy2 - yy1 + 1)inter = w * h# 计算重叠度IOU:重叠面积/(面积1+面积2-重叠面积)ovr = inter / (areas[i] + areas[order[1:]] - inter)# 找到重叠度不高于阈值的矩形框索引inds = np.where(ovr <= thresh)[0]# print("inds:",inds)# 将order序列更新,由于前面得到的矩形框索引要比矩形框在原order序列中的索引小1,所以要把这个1加回来order = order[inds + 1]return keepdef template(img_gray, template_img, template_threshold, nms=False):'''img_gray:待检测的灰度图片格式template_img:模板小图,也是灰度化了template_threshold:模板匹配的置信度'''h, w = template_img.shape[:2]res = cv2.matchTemplate(img_gray, template_img, cv2.TM_CCOEFF_NORMED)start_time = time.time()loc = np.where(res >= template_threshold)  # 大于模板阈值的目标坐标score = res[res >= template_threshold]  # 大于模板阈值的目标置信度# 将模板数据坐标进行处理成左上角、右下角的格式xmin = np.array(loc[1])ymin = np.array(loc[0])xmax = xmin + wymax = ymin + hxmin = xmin.reshape(-1, 1)  # 变成n行1列维度xmax = xmax.reshape(-1, 1)  # 变成n行1列维度ymax = ymax.reshape(-1, 1)  # 变成n行1列维度ymin = ymin.reshape(-1, 1)  # 变成n行1列维度score = score.reshape(-1, 1)  # 变成n行1列维度data_hlist = []data_hlist.append(xmin)data_hlist.append(ymin)data_hlist.append(xmax)data_hlist.append(ymax)data_hlist.append(score)data_hstack = np.hstack(data_hlist)  # 将xmin、ymin、xmax、yamx、scores按照列进行拼接thresh = 0.3  # NMS里面的IOU交互比阈值if nms:keep_dets = py_nms(data_hstack, thresh)  # (203, 5)else:keep_dets = list(range(data_hstack.shape[0]))print("nms time:", time.time() - start_time)  # 打印数据处理到nms运行时间dets = data_hstack[keep_dets]  # 最终的nms获得的矩形框return detsif __name__ == "__main__":img_rgb = cv2.imread('1.jpg')  # 需要检测的图片img_gray = cv2.cvtColor(img_rgb, cv2.COLOR_BGR2GRAY)  # 转化成灰色template_img = cv2.imread('4.jpg', 0)  # 模板小图template_threshold = 0.8  # 模板置信度dets = template(img_gray, template_img, template_threshold)for coord in dets:cv2.rectangle(img_rgb, (int(coord[0]), int(coord[1])), (int(coord[2]), int(coord[3])), (0, 0, 255), 2)cv2.imwrite("result4.jpg", img_rgb)

6、涉及到的库函数

cv2.matchTemplate

函数签名

cv2.matchTemplate(image, templ, method[, result[, mask]]) -> result

参数说明

image:

  • 类型:numpy.ndarray
  • 输入图像,在其中搜索模板。

templ:

  • 类型:numpy.ndarray
  • 模板图像,即要搜索的小图像。

method:

  • 类型:int
  • 用于计算匹配度的方法。常用的方法包括:
    • cv2.TM_CCOEFF
    • cv2.TM_CCOEFF_NORMED
    • cv2.TM_CCORR
    • cv2.TM_CCORR_NORMED
    • cv2.TM_SQDIFF
    • cv2.TM_SQDIFF_NORMED

result:

  • 类型:numpy.ndarray(可选)
  • 输出结果矩阵,存储匹配结果。

mask:

  • 类型:numpy.ndarray(可选)
  • 掩码图像,用于指定模板中哪些部分需要考虑。

返回值
result:

  • 类型:numpy.ndarray
  • 匹配结果矩阵,其大小为 (W - w + 1, H - h + 1),其中 W 和 H 是输入图像的宽和高,w 和 h 是模板图像的宽和高。
    每个元素表示模板在对应位置的匹配度。

7、参考

  • Python+Opencv实现图像匹配——模板匹配

  • https://docs.opencv.org/5.x/de/da9/tutorial_template_matching.html


更多有趣的代码示例,可参考【Programming】

http://www.dtcms.com/wzjs/821491.html

相关文章:

  • 做网站算软件开发么哪里可以学家装设计师
  • 宣传设计网站欧模网室内设计网
  • 造价员可以做兼职的网站计算机程序网站开发是什么
  • 网站建设一般要多少钱范湖网站建设哪家便宜
  • 北京网络营销培训广告优化师前景怎样
  • 湘潭做网站 z磐石网络宣传片制作公司报价
  • 浙江建设职业技术学院门户网站学校网站建设xml
  • 新老网站做301跳转物流企业网站建设方案
  • 安全员怎么网站中做备案商业网站定义
  • php网站服务器架设制作网页的常用软件有哪些
  • 抖音营销软件资源优化排名网站
  • 中型网站开发周期明星网页制作模板
  • 货运网站建设公司摄影网站建设需求分析
  • 网站前台模板设计做旅游网站平台合作入驻
  • 江苏泰州海陵区建设局网站中国纪检监察报电子报刊
  • 百度广告推广价格seo实战密码怎么样
  • 大连旅顺网站制作苍南县网站集约化建设
  • 网站ftp有什么用xampp 搭建 wordpress
  • 开发公司房屋移交物业3 如何进行网站优化设计
  • 网站运营总监佛山免费网站制作
  • 国家建设部查询网站网站502错误什么原因
  • 山东省建设教育信息网站首页windows删除wordpress
  • 网站开发怎么进行数据库连接网站主题栏目分类
  • 深圳市建网站公司搭建网页教程
  • 网站seo内容优化政务网站源码
  • 广州外贸网站制作公司广州网站开发 英诺科技
  • 如何从客户网站开发客户网站的制作成品
  • 网站建设的开多少税率wordpress响应多少才正常
  • 家政行业网站建设方案国内10大搜索引擎
  • 手机网站建设一般要多少钱做地方行业门户网站需要什么资格