OpenCV——《直方图操作》和《模版匹配》

news2024/11/19 23:29:19

1.直方图均衡化

img = cv2.imread('clahe.jpg',0)
plt.hist(img.ravel(),256)
plt.show()
#旨在使得图像整体效果均匀,黑与白之间的各个像素级之间的点更均匀一点。
equ = cv2.equalizeHist(img)
plt.hist(equ.ravel(),256)
plt.show()
#进行对比,均值化之后的,没有均值化之后的。
res = np.hstack((img,equ))
cv_show('res',res)

直方图均衡过后的鱼未进行均衡的进行对比
请添加图片描述
这个是未进行均衡的
请添加图片描述
这个是已经经过均衡过后得到
请添加图片描述

2.自适应直方图均衡化

#============自适应直方图均衡化============
#clipLimit:颜色对比度的阈值,可选项,默认值 8
#titleGridSize:局部直方图均衡化的模板(邻域)大小,可选项,默认值 (8,8)
clache = cv2.createCLAHE(clipLimit=2.0,tileGridSize=(8,8))
res_clahe = clache.apply(img)
res = np.hstack((img,equ,res_clahe))#进行水平叠加
cv_show('res',res)

效果对比图
请添加图片描述

3.模板匹配

img = cv2.imread('lena.jpg',0)
template = cv2.imread('face.jpg',0)
h,w, = template.shape
methods = ['cv2.TM_CCOEFF', 'cv2.TM_CCOEFF_NORMED', 'cv2.TM_CCORR',
           'cv2.TM_CCORR_NORMED', 'cv2.TM_SQDIFF', 'cv2.TM_SQDIFF_NORMED']
res = cv2.matchTemplate(img,template,cv2.TM_CCOEFF)
#找出矩阵中最大值和最小值,即其对应的(x, y)的位置
min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(res)
for meth in methods:
    img2 = img.copy()

    #匹配方法的真值
    method = eval(meth)
    print(method)
    res = cv2.matchTemplate(img, template, method)
    min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(res)

    # 如果是平方差匹配TM_SQDIFF或归一化平方差匹配TM_SQDIFF_NORMED,取最小值
    if method in [cv2.TM_SQDIFF, cv2.TM_SQDIFF_NORMED]:
        top_left = min_loc
    else:
        top_left = max_loc
    bottom_right =  (top_left[0]+w,top_left[1]+h)

    #画矩形
    cv2.rectangle(img2,top_left,bottom_right,255,2)
    plt.subplot(121), plt.imshow(res, cmap='gray')
    plt.xticks([]), plt.yticks([])  # 隐藏坐标轴
    plt.subplot(122), plt.imshow(img2, cmap='gray')
    plt.xticks([]), plt.yticks([])
    plt.suptitle(meth)
    plt.show()

参数含义:
image:源图像,待匹配图像,8bit整数型、32bit浮点型,可以是单通道或多通道;
templ:模板图像,类型同源图像,尺寸必须小于源图像;
method:匹配方法;
mask:掩码;
result:返回结果,32bit浮点型,源图像为W×H,模板图像为w×h,生成的图像对象为(W−w+1)×(H−h+1);其返回的结果可以变相的理解为一种

cv2.rectangle(img2,top_left,bottom_right,255,2)在原图上画出来这个矩形,原图上的坐标轴显示。
请添加图片描述

请添加图片描述

4.多模版匹配

img_rgb = cv2.imread('mario.jpg')
img_gray = cv2.cvtColor(img_rgb, cv2.COLOR_BGR2GRAY)
template = cv2.imread('mario_coin.jpg', 0)
h, w = template.shape[:2]

res = cv2.matchTemplate(img_gray, template, cv2.TM_CCOEFF_NORMED)
threshold = 0.8
# 取匹配程度大于%80的坐标
loc = np.where(res >= threshold)#返回的是索引
for pt in zip(*loc[::-1]):  # *号表示可选参数
    bottom_right = (pt[0] + w, pt[1] + h)
    cv2.rectangle(img_rgb, pt, bottom_right, (0, 0, 255), 2)

cv2.imshow('img_rgb', img_rgb)
cv2.waitKey(0)

请添加图片描述

参考链接:
https://blog.csdn.net/qq_29023939/article/details/81023062
https://blog.csdn.net/sinat_41104353/article/details/85171185

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/694215.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

mapbox图层层级问题

如果在项目之初我们没有设计好图层的问题,那么大概率我们会与到预期图层在别的图层下面的问题,这是需要使用addlayer、movelayer方法来调整图层的位置了。 一般而言先添加的图层在显示的时候在后添加图层的下面,例如下面的代码: …

ChatGPT伪原创文章的应用与发展

ChatGPT是一种基于人工智能技术的自然语言处理模型,它能够生成逼真的、具有上下文连贯性的文本。近年来,ChatGPT在各个领域的应用越来越广泛,其发展潜力也逐渐被人们所认识。本文将从多个方面对ChatGPT的应用与发展进行详细阐述。 ChatGPT在…

人脸考勤签到进阶篇

目录 签到业务流程说明 一、需求介绍 二、如何获取地理信息? 三、如何判定某地区新冠疫情的风险等级? 开通腾讯位置服务 二、腾讯位置服务SDK 把定位坐标转换成真实地址 一、获取定位坐标 uni.authorize(OBJECT) 二、编辑签到页面 在Docker中…

如何在 Spring Boot 中使用反向代理

如何在 Spring Boot 中使用反向代理 介绍 在分布式系统中,反向代理是一项非常重要的技术。通过反向代理,可以将客户端的请求转发到后端的多台服务器上,实现负载均衡和故障转移等功能。本文将介绍如何在 Spring Boot 应用中使用反向代理。 环…

微信小程序判断用户是否授权定位

1、判断用户是否授权定位 checkLocationAuth() {let that thiswx.getSetting({success: (res) > {let authSetting res.authSettingif (authSetting[scope.userLocation]) {that.getCurrentLocation()} else if (authSetting[scope.userLocation] false) {wx.showModal(…

yxcms弱口令至getshell 漏洞复现

为方便您的阅读,可点击下方蓝色字体,进行跳转↓↓↓ 01 环境部署02 漏洞配置03 利用方式04 修复方案 01 环境部署 (1)yxcms yxcms 基于 PHPMySQL 开发,这是一个采用轻量级 MVC 设计模式的网站管理系统。轻量级 MVC 设…

【wifi模块应用】基于路由模块SKW92A的4G转WiFi、无线中继、视频传输方案

在家用WiFi,外出用4G,已经成为时下很多人的常规操作,尤其在室内环境中,无论是办公、居家,还是在高铁站、飞机场,亦或是酒店、咖啡馆等公共场所,我们都会下意识地主动连上WiFi。据悉,…

lenovo联想Yoga 13s 2021 AMD平台ACN版(82CY)原厂预装Win11系统镜像原装OEM恢复出厂状态

LENOVO联想笔记本电脑,Yoga 13s 2021 AMD平台ACN版(82CY)原装出厂Windows11系统,恢复原厂OEM预装专用系统 系统自带所有驱动、出厂主题壁纸LOGO、Office办公软件、联想电脑管家等预装程序 所需要工具:16G或以上的U盘 文件格式:…

星辰秘典:探索Python项目的神秘力量——贪吃蛇

✨博主:命运之光 🌸专栏:星辰秘典:探索Python项目的神秘力量 🐳专栏:web开发(html css js) ❤️专栏:Java经典程序设计 ☀️博主的其他文章:点击进入博主的主…

Hive(10):Hive分桶表

1 分桶表的概念 分桶表也叫做桶表,叫法源自建表语法中bucket单词,是一种用于优化查询而设计的表类型。分桶表对应的数据文件在底层会被分解为若干个部分,通俗来说就是被拆分成若干个独立的小文件。在分桶时,要指定根据哪个字段将数据分为几桶(几个部分)。2 分桶表的规则 …

torch.cuda模块获取信息

判断GPU是否可用 import torch print(torch.cuda.is_available())如果输出True则表示可以使用GPU 输出可使用GPU的数量 import torch print(torch.cuda.device_count())输出1就表示只有一块可以用 输出GPU的名字 import torch print(torch.cuda.get_device_name())如果有…

如何在 VSCode 去调试 Redis源码

学习使用 Redis 时,从 GitHub 下载 Redis 源码是个不错的选择。在下载后,通过创建 task.json 和 launch.json 两个文件,可以方便地在本地进行 Redis 的编译、运行和调试。通过这些步骤,你可以更好地理解 Redis 的内部实现&#xf…

小程序 css flex的子元素图片被周边元素text挤压变形

flex下子元素会自动拉伸,第一个子元素image设置了100 * 100还是被后面的text过长文字挤压了。 解决: 方法1: 让图片不自动拉伸加上 flex:noe 方法2: flex下面所有的子元素都设置宽度,这个会比较麻烦,需要…

如何在Microsoft Excel中迅速冻结首行和末行

如果你正在处理一个大型电子表格,那么冻结某些行或列会很有用,这样当你滚动浏览工作表的其余部分时,它们会留在屏幕上。 当你在 Excel 中滚动浏览大的工作表时,你可能希望保留一些行或列,例如页眉。Excel 允许你通过以…

useReducer可配合react-redux方案

接下来 我们来看 useReducer 这个属性 配合 react-redux 就会非常好用 那么 我们编写一段这样代码 import React, { useState } from react;const ContDom () > {const [count, setCount] useState(0);return (<div>cont值{ count }<button onClick {()>{ …

DevSecOps实践:如何在研发过程中做好供应链安全

DevSecOps与供应链安全 很多企业都建立了DevOps流程&#xff0c;但安全基本还处在流程之外&#xff0c;没有融入传统DevOps流程&#xff0c;导致安全一直都是敏捷交付的瓶颈。本篇内容我们将从DvSecOps和软件供应链安全的角度来谈谈研发过程中的安全问题。 01 DevSecOps——供…

Self-Instruct 论文解读:利用大模型自己给自己生成指令数据,指令数据自动生成

总览 大规模“指令调整”的语言模型&#xff0c;即指令微调的LLM&#xff0c;已经表现出非凡的零样本能力&#xff0c;尤其是推广新任务上。 然而&#xff0c;这些模型严重依赖于人类编写的指令数据&#xff0c;而这些数据通常在数量、多样性和创造力方面受到限制&#xff0c;…

Elasticsearch:result

排序 es支持对搜索结果排序&#xff0c;默认是根据相关度算分(_score)来排序。可以排序的字段类型有&#xff1a;keyword、数值、地理坐标、日期等类型。 语法 GET /indexName/_search {"query": {"match_all": {}},"sort": [{"FIELD&quo…

视频融合平台EasyCVR迁移数据库报错1146是什么原因?该如何解决?

EasyCVR视频融合平台基于云边端协同架构&#xff0c;具有强大的数据接入、处理及分发能力。平台支持多协议接入&#xff0c;包括&#xff1a;国标GB28181、RTMP、RTSP/Onvif、海康Ehome、海康SDK、大华SDK、宇视SDK等&#xff0c;对外可分发多格式视频流&#xff0c;包括RTSP、…