python opencv稍基础初学

news/2024/5/20 0:13:12/文章来源:https://blog.csdn.net/E___V___E/article/details/137021890

 傅里叶变换

傅里叶变换f​​​​​傅里叶分析之掐死教程(完整版)更新于2014.06.06 - 知乎 (zhihu.com)icon-default.png?t=N7T8https://zhuanlan.zhihu.com/p/19763358

相当nice

傅里叶变换的作用
·高频:变化剧烈的灰度分量,例如边界
·低频:变化缓慢的灰度分量,例如一片大海
滤波
·低通滤波器:只保留低频,会使得图像模糊
·高通滤波器:只保留高频,会使得图像细节增强


·opencv中主要就是cv2.dft()和cv2.idft(),输入图像需要先转换成np.float32格式。
·得到的结果中频率为0的部分会在左上角,通常要转换到中心位置,可以通过shift变换来实现。
·cv2.dft()返回的结果是双通道的(实部,虚部),通常还需要转换成图像格式才能展示(0,255)。
 

import numpy as np
import cv2
from matplotlib import pyplot as plt
img = cv2.imread('lena. jpg',0)
img_float32 = np. float32(img)
dft = cv2. dft(img_float32, flags = cv2. DFT_COMPLEX_OUTPUT)
dft_shift = np. fft. fftshift(dft)
#得到灰度图能表示的形式
magnitude_spectrum = 20*np.log(cv2.magnitude(dft_shift[:,:,0],dft_shift[:,:,1]))
#####################这是映射公式20*np.log(plt.subplot(121),plt. imshow(img, cmap ='gray')
plt. title('Input Image'), plt. xticks([]), plt. yticks([])
plt. subplot(122),plt. imshow(magnitude_spectrum, cmap ='gray')
plt. title('Magnitude Spectrum'), plt. xticks([]), plt. yticks([])
plt.show()

dft idft 

直方图概念

cv2.calcHist(images,channels,mask,histSize,ranges)
·images:原图像图像格式为uint8或float32。当传入函数时应用中括号]括来例如[img]
·channels:同样用中括号括来它会告函数我们统幅图像的直方图。如果入图像是灰度图它的值就是[0]如果是彩色图像的传入的参数可以是[0[1][2]它们分别
对应着BGR。
·mask:掩模图像。统整幅图像的直方图就把它为None。但是如果你想统图像某一分的直方图的你就制作一个掩模图像并使用它。
·histSize:BIN的数目。也应用中括号括来
·ranges:像素值范围常为[0,256]

img = cv2.imread('cat. jpg',0)#0表示灰度图
hist = cv2. calcHist([img],[0],None, [256],[0,256])
hist.shape(256,1)plt.hist(img.ravel(),256);
plt.show()
img = cv2.imread('cat. jpg')
color = ('b','g','r')
for i, col in enumerate(color):
histr = cv2. calcHist([img],[i],None, [256],[0,256])
plt. plot(histr, color = col)
plt.xlim([0,256])

 mask操作(掩码、掩膜)

#创建mask
mask = np. zeros(img. shape[: 2], np. uint8)
#uint8是无符号整型2的八次方,img是为了保障和目标图片大小一致
mask[100: 300, 100: 400] = 255#保存white
cv_show(mask,'mask')
(414,500)img = cv2.imread('cat. jpg', 0)
cv_show(img,'img')masked_img = cv2. bitwise_and(img, img, mask=mask)#与操作
cv_show(masked_img,'masked_img')hist_full = cv2. calcHist([img], [0], None, [256], [0, 256])#no
hist_mask = cv2. calcHist([img], [0], mask, [256], [0, 256])#maskplt.subplot(221),plt. imshow(img,'gray')
plt.subplot(222), plt. imshow(mask, 'gray')
plt. subplot(223), plt. imshow(masked_img,'gray')
plt.subplot(224), plt.plot(hist_full), plt. plot(hist_mask)
plt.xlim([0, 256])
plt.show()

 mask就是个滤波器,下面这里是低通滤波器

import numpy as np
import cv2
from matplotlib import pyplot as plt img=cv2.imread('lena.jpg',0)img_float32=np.float32(img)dft=cv2.dft(img_float32,flags=cv2.DFT_COMPLEX_OUTPUT) 
dft_shift=np.fft.fftshift(dft)rows, cols=img.shape
crow,ccol=int(rows/2),int(cols/2)#中心位置 低通滤波mask= np.zeros((rows,cols,2),np.uint8)mask[crow-30:crow+30,ccol-30:ccol+30]=1#IDFT
fshift=dft_shift*mask#把低通,就是让边界模糊,高通就是边界明显#这里mask是和dft的结果做的 dft的结果实部虚部两个维度
f_ishift=np.fft.ifftshift(fshift) img_back=cv2.idft(f_ishift)
img_back=cv2.magnitude(img_back[:,:,0],img_back[:,:,1]) plt.subplot(121),plt.imshow(img,cmap='gray')
plt.subplot(122),plt.imshow(img_back, cmap ='gray') 
plt.title('Result'),plt.xticks([]),plt.yticks([])plt.show()

当是高频是 

 

 直方图均值化

映射变换

img = cv2.imread('clahe. jpg',0)#0表示灰度图 #clahe
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')

 实验的结果是拉高了对比度.................过曝? 

 自适应直方图对比化

线性的差值处理

 clipLimit 颜色对比度的阈值   titleGridSize 进行像素均衡化的网格大小,即在多少网格下进行直方图的均衡化操作

clahe = cv2. createCLAHE(clipLimit=2.0, tileGridSize=(8,8)res_clahe = clahe. apply(img)
res = np. hstack((img, equ, res_clahe)
cv_show (res,' res')

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

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

相关文章

【搜索引擎2】实现API方式调用ElasticSearch8接口

1、理解ElasticSearch各名词含义 ElasticSearch对比Mysql Mysql数据库Elastic SearchDatabase7.X版本前有Type,对比数据库中的表,新版取消了TableIndexRowDocumentColumnmapping Elasticsearch是使用Java开发的,8.1版本的ES需要JDK17及以上…

Elasticsearch-相关性

相关性描述的是⼀个⽂档和查询语句匹配的程度。ES 会对每个匹配查询条件的结果进⾏算分_score。_score 的评分越高,相关度越高。 ES 5.0之前使用TF-IDF 相关性算法, 5.0之后使用了BM25算法 TF-IDF 公式 score(q,d) queryNorm(q) coord(q,d) …

数据处理库Pandas数据结构DataFrame

Dataframe是一种二维数据结构,数据以表格形式(与Excel类似)存储,有对应的行和列,如图3-3所示。它的每列可以是不同的值类型(不像 ndarray 只能有一个 dtype)。基本上可以把 DataFrame 看成是共享…

@EnableWebMvc 导致自定义序列化器失效

目录 前言 一. 自定义序列化器失效 1.1 EnableWebMvc 的作用 1.2 EnableWebMvc 带来了什么后果 1.3 原理分析 1.4 问题解决 二. 总结 前言 在使用Swagger的时候用 到了EnableWebMvc,发现之前为了解决Long类型、日期类型等自定义序列化器失效了 Configurati…

基于javaweb宠物领养平台管理系统设计和实现

基于javaweb宠物领养平台管理系统设计和实现 博主介绍:多年java开发经验,专注Java开发、定制、远程、文档编写指导等,csdn特邀作者、专注于Java技术领域 作者主页 央顺技术团队 Java毕设项目精品实战案例《1000套》 欢迎点赞 收藏 ⭐留言 文末获取源码联…

Android ddms在macOS上面卡死和Java版本异常无法关闭弹窗处理

背景 在macOS上面打开ddms工具遇到错误。产留的uix文件无法打开,弹出无法关闭和进入ddms无任何响应。 问题-无法关闭的弹窗 首先ddms在Android SDK中位置/sdk/tools/monitor这个二进制文件就是ddms程序了。 终端执行这个程序即可。第一个遇到的问题,打开ddms之后,弹出一个…

MySQL 高级语句(二)

一、子查询 1.1 相同表子查询 1.2 不同表/多表子查询 1.3 子查询的应用 1.3.1 语法 1.3.2 insert 子查询 1.3.3 update 子查询 1.3.4 delete 子查询 1.4 exists 关键字 1.4.1 true 1.4.2 false 1.5 as别名 二、视图 2.1 视图和表的区别和联系 2.1.1 区别 2.1.2 …

阿里云云服务器资源规格推荐指南

资源规格推荐可以根据您的特定业务场景,为您推荐最合适的计算资源规格以及满足您算力需求的资源规模。本文介绍如何根据物理机规格推荐ECS资源和根据总算力推荐ECS资源。 根据物理机规格推荐ECS资源 IDC上云可以帮助您在将线下IDC服务器搬迁上云前,根据…

单臂路由和三层交换机

目录 一.单臂路由 1.单臂路由的工作原理 2.单臂路由的配置 2.1画出拓扑图 2.2配置PC 2.3配置交换机 2.4配置路由器 2.5测试 二.三层交换机 1.三层交换机的概述 2.三层交换机的配置 2.1画出拓扑图 2.2配置PC 2.3配置二层交换机 2.4配置三层交换机 2.5测试 3.拓展 三.总结 一.…

iOS_convert point or rect 坐标和布局转换+判断

文章目录 1. 坐标转换2. 布局转换3. 包含、相交 如:有3个色块 let view1 UIView(frame: CGRect(x: 100.0, y: 100.0, width: 300.0, height: 300.0)) view1.backgroundColor UIColor.cyan self.view.addSubview(view1)let view2 UIView(frame: CGRect(x: 50.0, …

AI视频渲染原理是什么?

一、AI渲染原理 AI视频渲染是一种结合了人工智能技术的新型渲染方式,它主要通过深度学习和其他机器学习方法来优化传统渲染流程,以提高效率和质量。以下是AI视频渲染可能涉及的一些基本原理: 1. **智能采样**: - AI可以帮助决定在…

Git使用:实现文件在不同设备之间进行同步

一、注册Gitee,创建远程仓库 注册网址:登录 - Gitee.com 打开Gitee,注册完进行登录,点击右上角【】创建一个仓库 新建仓库: 点击创建,仓库创建完毕。 二、下载Git安装包,并创建本地仓库 下载网…

STM32串口收发单字节数据原理及程序实现

线路连接: 显示屏的SCA接在B11,SCL接在B10,串口的RX连接A9,TX连接A10。 程序编写: 在上一个博客中实现了串口的发送代码,这里实现串口的接收代码,在上一个代码的基础上增加程序功能。 Seiral.…

【数字图像处理matlab系列】数组索引

【数字图像处理matlab系列】数组索引 【先赞后看养成习惯】【求点赞+关注+收藏】 MATLAB 支持大量功能强大的索引方案,这些索引方案不仅简化了数组操作,而且提高了程序的运行效率。 1. 向量索引 维数为1xN的数组称为行向量。行向量中元素的存取是使用一维索引进行的。因此…

C语言数据结构基础——二叉树学习笔记(三)链式二叉树以及初步认识递归思想

1.链式二叉树概念及其逻辑 每个树都要看成:根,左子树,右子树 链表、顺序表中的遍历方式有正序遍历和逆序遍历,而我们在二叉树中,有前序遍历、中序遍历、后序遍历、层序等多种遍历方法。 所谓 二叉树遍历 (Traversal) …

[Java基础揉碎]单例模式

目录 什么是设计模式 什么是单例模式 饿汉式与懒汉式 饿汉式vs懒汉式 懒汉式存在线程安全问题 什么是设计模式 1.静态方法和属性的经典使用 2.设计模式是在大量的实践中总结和理论化之后优选的代码结构、编程风格、 以及解决问题的思考方式。设计模式就像是经典的棋谱&am…

(三)Ribbon负载均衡

1.1.负载均衡原理 SpringCloud底层其实是利用了一个名为Ribbon的组件,来实现负载均衡功能的。 1.2.源码跟踪 为什么我们只输入了service名称就可以访问了呢?之前还要获取ip和端口。 显然有人帮我们根据service名称,获取到了服务实例的ip和…

C++ vector容器类型

vector类为内置数组提供了一种替代表示&#xff0c;与string类一样 vector 类是随标准 C引入的标准库的一部分 &#xff0c;为了使用vector 我们必须包含相关的头文件 &#xff1a; #include <vector> 使用vector有两种不同的形式&#xff0c;即所谓的数组习惯和 STL习…

MySQL - 高阶语句(二)

目录 6. 子查询 操作&#xff1a; EXISTS 关键字 别名 as 7. 视图 理论&#xff1a; 操作&#xff1a; 视图的优缺点 8. NULL 值 9. union 联级 9.1 union &#xff08;合并后去重&#xff09; 9.2 union all (合并后不去重) 9.3 取非交集值 10. case 条件选择查…

React中 类组件 与 函数组件 的区别

类组件 与 函数组件 的区别 1. 类组件2. 函数组件HookuseStateuseEffectuseCallbackuseMemouseContextuseRef 3. 函数组件与类组件的区别3.1 表面差异3.2 最大不同原因 1. 类组件 在React中&#xff0c;类组件就是基于ES6语法&#xff0c;通过继承 React.component 得到的组件…