opencv—常用函数学习_“干货“_7

目录

十九、模板匹配

从图像中提取矩形区域的子像素精度补偿 (getRectSubPix)

在图像中搜索和匹配模板 (matchTemplate)

比较两个形状(轮廓)的相似度 (matchShapes)

解释

二十、图像矩

计算图像或轮廓的矩 (moments)

计算图像或轮廓的Hu不变矩 (HuMoments)

解释

使用示例

二一、查找表变换

使用查找表对图像进行变换 (LUT)

解释

实际应用

伽马校正的示例

http://t.csdnimg.cn/i8pqt —— opencv—常用函数学习_“干货“_总(VIP)

散的正在一部分一部分发,不需要VIP。

资料整理不易,有用话给个赞和收藏吧。


十九、模板匹配

        在OpenCV中,模板匹配是图像处理和计算机视觉中的一种重要技术,用于在大图像中找到与模板图像匹配的区域。下面介绍一些常用的模板匹配函数及其使用示例。

模板匹配函数
getRectSubPixmatchTemplatematchShapes
从图像中提取矩形区域的子像素精度补偿在图像中搜索和匹配模板比较两个形状(轮廓)的相似度

从图像中提取矩形区域的子像素精度补偿 (getRectSubPix)
import cv2
import numpy as np# 读取图像
image = cv2.imread('path_to_image.jpg')# 定义中心和大小
center = (50, 50)
patch_size = (100, 100)# 提取矩形区域
patch = cv2.getRectSubPix(image, patch_size, center)cv2.imshow('Original Image', image)
cv2.imshow('Extracted Patch', patch)
cv2.waitKey(0)
cv2.destroyAllWindows()
在图像中搜索和匹配模板 (matchTemplate)
# 读取图像和模板
image = cv2.imread('path_to_image.jpg', 0)
template = cv2.imread('path_to_template.jpg', 0)# 进行模板匹配
result = cv2.matchTemplate(image, template, cv2.TM_CCOEFF_NORMED)# 获取最佳匹配位置
min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(result)# 绘制匹配结果
top_left = max_loc
h, w = template.shape
bottom_right = (top_left[0] + w, top_left[1] + h)
cv2.rectangle(image, top_left, bottom_right, 255, 2)cv2.imshow('Template Matched', image)
cv2.waitKey(0)
cv2.destroyAllWindows()
比较两个形状(轮廓)的相似度 (matchShapes)
# 读取图像并转换为灰度图
image1 = cv2.imread('path_to_image1.jpg', 0)
image2 = cv2.imread('path_to_image2.jpg', 0)# 阈值化
_, binary1 = cv2.threshold(image1, 127, 255, cv2.THRESH_BINARY)
_, binary2 = cv2.threshold(image2, 127, 255, cv2.THRESH_BINARY)# 提取轮廓
contours1, _ = cv2.findContours(binary1, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
contours2, _ = cv2.findContours(binary2, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)# 计算相似度
if contours1 and contours2:similarity = cv2.matchShapes(contours1[0], contours2[0], cv2.CONTOURS_MATCH_I1, 0.0)print(f'Shape similarity: {similarity}')

解释

  • getRectSubPix:从图像中提取矩形区域的子像素精度补偿,适用于需要高精度提取的场景。
  • matchTemplate:在大图像中搜索和匹配模板,返回一个相似度图,可以进一步处理以找到最佳匹配位置。
  • matchShapes:比较两个形状(轮廓)的相似度,返回一个相似度值,值越小表示形状越相似。

这些示例展示了如何使用OpenCV中的各种模板匹配函数来处理图像。根据具体的应用需求,可以灵活运用这些函数来实现复杂的模板匹配任务。

二十、图像矩

        在OpenCV中,图像矩是图像的一个重要特征,用于描述图像的形状和分布。常用的图像矩函数包括 momentsHuMoments。下面介绍这些函数及其使用示例。

图像矩函数
momentsHuMoments
计算图像或轮廓的矩计算图像或轮廓的Hu不变矩
计算图像或轮廓的矩 (moments)
import cv2
import numpy as np# 读取图像并转换为灰度图
image = cv2.imread('path_to_image.jpg', cv2.IMREAD_GRAYSCALE)# 应用阈值处理
_, binary_image = cv2.threshold(image, 127, 255, cv2.THRESH_BINARY)# 计算轮廓
contours, _ = cv2.findContours(binary_image, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)# 计算第一个轮廓的矩
if contours:moments = cv2.moments(contours[0])print("Moments:", moments)
计算图像或轮廓的Hu不变矩 (HuMoments)
# 计算第一个轮廓的矩
if contours:moments = cv2.moments(contours[0])# 计算Hu不变矩hu_moments = cv2.HuMoments(moments).flatten()print("Hu Moments:", hu_moments)

解释

  • moments:计算图像或轮廓的矩,返回一个包含多种矩(如零阶矩、一阶矩、二阶矩等)的字典。这些矩可以用来计算图像的质心、面积、惯性矩等。
  • HuMoments:根据普通矩计算Hu不变矩,返回7个不变矩。这些不变矩对图像的缩放、旋转和镜像变换保持不变,是一种强有力的形状特征。

使用示例

        下面是一个综合的示例,展示了如何使用momentsHuMoments来计算图像或轮廓的矩和不变矩。

import cv2
import numpy as np# 读取图像并转换为灰度图
image = cv2.imread('path_to_image.jpg', cv2.IMREAD_GRAYSCALE)# 应用阈值处理
_, binary_image = cv2.threshold(image, 127, 255, cv2.THRESH_BINARY)# 计算轮廓
contours, _ = cv2.findContours(binary_image, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)# 计算第一个轮廓的矩和Hu不变矩
if contours:contour = contours[0]# 计算矩moments = cv2.moments(contour)print("Moments:", moments)# 计算质心cX = int(moments["m10"] / moments["m00"])cY = int(moments["m01"] / moments["m00"])print("Centroid:", (cX, cY))# 计算Hu不变矩hu_moments = cv2.HuMoments(moments).flatten()print("Hu Moments:", hu_moments)# 在图像上绘制轮廓和质心image_color = cv2.cvtColor(image, cv2.COLOR_GRAY2BGR)cv2.drawContours(image_color, [contour], -1, (0, 255, 0), 2)cv2.circle(image_color, (cX, cY), 5, (0, 0, 255), -1)cv2.imshow("Contour with Centroid", image_color)cv2.waitKey(0)cv2.destroyAllWindows()

        这些示例展示了如何使用OpenCV中的图像矩函数来处理图像,根据具体的应用需求,可以灵活运用这些函数来实现复杂的图像特征提取和分析任务。

二一、查找表变换

        在OpenCV中,查找表(LUT,Look-Up Table)变换是一种高效的像素值映射方法,用于对图像进行各种非线性变换。通过预先定义一个查找表,可以快速地将输入图像的像素值转换为输出图像的像素值。OpenCV提供了LUT函数来实现这一功能。

查找表变换函数
LUT使用查找表对图像进行变换

使用查找表对图像进行变换 (LUT)
import cv2
import numpy as np# 读取图像
image = cv2.imread('path_to_image.jpg', cv2.IMREAD_GRAYSCALE)# 定义一个查找表,将像素值变换为其平方根的结果
lut = np.array([np.sqrt(i) * 16 for i in range(256)], dtype=np.uint8)# 应用查找表变换
result_image = cv2.LUT(image, lut)# 显示原图像和变换后的图像
cv2.imshow('Original Image', image)
cv2.imshow('LUT Transformed Image', result_image)
cv2.waitKey(0)
cv2.destroyAllWindows()

解释

  • 定义查找表:在这个示例中,我们定义了一个查找表lut,将每个像素值映射到其平方根乘以16的值。np.sqrt(i) * 16用于计算像素值的平方根并放大以增加对比度。
  • 应用查找表变换:使用cv2.LUT函数将查找表应用于图像。这将图像中的每个像素值替换为查找表中对应的值。

实际应用

        查找表变换在图像处理中的应用非常广泛,常用于以下场景:

  1. 伽马校正:调整图像的亮度和对比度。
  2. 颜色映射:将灰度图像映射到伪彩色图像。
  3. 非线性增强:对图像进行对数变换、指数变换等非线性增强。
伽马校正的示例
# 伽马校正的查找表
gamma = 2.2
lut = np.array([((i / 255.0) ** gamma) * 255 for i in range(256)], dtype=np.uint8)# 应用查找表变换
gamma_corrected_image = cv2.LUT(image, lut)# 显示伽马校正后的图像
cv2.imshow('Gamma Corrected Image', gamma_corrected_image)
cv2.waitKey(0)
cv2.destroyAllWindows()

        在这个示例中,我们定义了一个用于伽马校正的查找表lut,并将其应用于图像以实现伽马校正效果。

        通过这些示例,可以看到如何使用OpenCV中的LUT函数来实现各种查找表变换。根据具体的应用需求,可以灵活定义查找表并应用于图像处理任务。

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

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

相关文章

IntelliJ IDEA 2024.1 最新变化 附问卷调查 AI

IntelliJ IDEA 2024.1 最新变化 问卷调查项目在线AI IntelliJ IDEA 2024.1 最新变化关键亮点全行代码补全 Ultimate对 Java 22 功能的支持新终端 Beta编辑器中的粘性行 AI AssistantAI Assistant 改进 UltimateAI Assistant 中针对 Java 和 Kotlin 的改进代码高亮显示 Ultimate…

Android14之调试广播实例(二百二十五)

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 优质专栏:多媒…

shell脚本检查OGG同步进程状态

服务器环境中在root用户下部署了ogg同步进程,在oracle用户下也部署了同步进程。在不用脚本检查的情况下,进程需要在root用户和oracle用户下来回切换,比较麻烦,所以考虑用脚本实现,在root用户下一键检查root用户和oracl…

Grid Search:解锁模型优化新境界

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 非常期待和您一起在这个小…

一键复制页面

<script src"./html2canvas.js"></script> <div id"target"><ol style"margin-top: 8px;margin-bottom: 8px;padding-left: 25px;" class"list-paddingleft-1"><li><p>递归遍历 DOM 树:</p&…

【Android性能优化】Android CPU占用率检测原理和优化方向

【Android性能优化】Android CPU占用率检测原理和优化方向 CPU相关知识 CPU占用的基本计算公式 (1 - 空闲态运行时间/总运行时间) * 100% Hz、Tick、Jiffies&#xff1a; Hz&#xff1a;Linux核心每隔固定周期会发出timer interrupt (IRQ 0)&#xff0c;HZ是用来定义每一秒有…

python 66 个冷知识 0720

66个有趣的Python冷知识 一行反转列表 使用切片一行反转列表&#xff1a;reversed_list my_list[::-1] 统计文件单词数量 使用 collections.Counter 统计文件中每个单词的数量&#xff1a;from collections import Counter; with open(file.txt) as f: word_count Counter(f…

【数据结构初阶】复杂度

目录 一、时间复杂度 1、时间复杂度的概念 2、大O的渐进表示法 3、常见的时间复杂度计算举例 二、空间复杂度 1、空间复杂度的概念 2、常见的空间复杂度计算举例 三、常见复杂度对比 正文开始—— 前言 一个算法&#xff0c;并非越简洁越好&#xff0c;那该如何衡量一个算法…

FLINK-checkpoint失败原因及处理方式

在 Flink 或其他分布式数据处理系统中&#xff0c;Checkpoint 失败可能由多种原因引起。以下是一些常见的原因&#xff1a; 资源不足&#xff1a; 如果 TaskManager 的内存或磁盘空间不足&#xff0c;可能无法完成状态的快照&#xff0c;导致 Checkpoint 失败。 网络问题&am…

微信小程序开发入门指南

文章目录 一、微信小程序简介二、微信小程序开发准备三、微信小程序开发框架四、微信小程序开发实例六、微信小程序开发进阶6.1 组件化开发6.2 API调用6.3 云开发 七、微信小程序开发注意事项7.1 遵守规范7.2 注意性能7.3 保护用户隐私 八、总结 大家好&#xff0c;今天将为大家…

源码安装 AMD GPGPU 生态 ROCm 备忘

0, 前言 如果初步接触 AMD这套&#xff0c;可以先在ubuntu上使用apt工具安装&#xff0c;并针对特定感兴趣的模块从源码编译安装替换&#xff0c;并开展研究。对整体感兴趣时可以考虑从源码编译安装整个ROCm生态。 1, 预制二进制通过apt 安装 待补。。。 2, 从源码安装 sudo …

C:一些题目

1.分数求和 计算1/1-1/21/3-1/41/5 …… 1/99 - 1/100 的值 #include <stdio.h>int main(){double sum 0.0; // 使用 double 类型来存储结果&#xff0c;以处理可能的小数部分int sign 1; // 符号标志&#xff0c;初始为 1 表示正数for (int i 1; i < 100; i)…

Vue3 内置组件Teleport以及Susponse

1、Teleport 1.1 概念 将组件模版中的指定的dom挂载&#xff08;传送&#xff09;到指定的dom元素上&#xff0c;如挂载到body中&#xff0c;挂载到#app选择器上面。 1.2 应用场景 经典案例如&#xff1a;模态框。 <template><teleport to"body">&l…

处理AI模型中的“Type Mismatch”报错:数据类型转换技巧

处理AI模型中的“Type Mismatch”报错&#xff1a;数据类型转换技巧 &#x1f504; 处理AI模型中的“Type Mismatch”报错&#xff1a;数据类型转换技巧 &#x1f504;摘要引言正文内容1. 错误解析&#xff1a;什么是“Type Mismatch”&#xff1f;2. 数据类型转换技巧2.1 检查…

Redis之Zset

目录 一.介绍 二.命令 三.编码方式 四.应用场景 Redis的学习专栏&#xff1a;http://t.csdnimg.cn/a8cvV 一.介绍 ZSET&#xff08;有序集合&#xff09;是 Redis 提供的一种数据结构&#xff0c;它与普通集合&#xff08;SET&#xff09;类似&#xff0c;不同之处在于每个…

【带你了解软件系统架构的演变】

🌈个人主页: 程序员不想敲代码啊 🏆CSDN优质创作者,CSDN实力新星,CSDN博客专家 👍点赞⭐评论⭐收藏 🤝希望本文对您有所裨益,如有不足之处,欢迎在评论区提出指正,让我们共同学习、交流进步! 1. 介绍 🍋‍🟩软件系统架构的演变是一个响应技术变革、业务需求…

Tailwind CSS常见组合用法

1、一般布局组合 <main className"flex min-h-screen flex-col items-center justify-between p-24"></main>flex将元素的显示类型设置为 flexbox。这意味着子元素将以 flex 项的方式排列。min-h-screen将元素的最小高度设置为全屏高度&#xff08;视口高…

【Powershell】超越限制:获取Azure AD登录日志

你是否正在寻找一种方法来追踪 Azure Active Directory&#xff08;Azure AD&#xff09;中用户的登录活动&#xff1f; 如果是的话&#xff0c;查看Azure AD用户登录日志最简单的方法是使用Microsoft Entra管理中心。打开 https://entra.microsoft.com/&#xff0c;然后进入 监…

CentOS 7开启SSH连接

1. 安装openssh-server 1.1 检查是否安装openssh-server服务 yum list installed | grep openssh-server如果有显示内容&#xff0c;则已安装跳过安装步骤&#xff0c;否则进行第2步 1.2 安装openssh-server yum install openssh-server2. 开启SSH 22监听端口 2.1 打开ssh…

对零拷贝技术的思考过程

名词 CPU拷贝&#xff1a;将内核缓存区的数据拷贝到用户缓存区DMA拷贝&#xff1a;将外设上的数据拷贝到内核缓存区系统调用&#xff1a;应用程序调用操作系统的接口上下文切换&#xff1a;用户态和内核态&#xff0c;应用调用操作系统的接口&#xff0c;操作系统调用CPU内核工…