python opencv稍基础初学

 傅里叶变换

傅里叶变换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.hqwc.cn/news/573089.html

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

相关文章

Centos 配置JDK和Tomcat(新手版)

Centos 配置JDK和Tomcat(新手版) 1、安装JDK 如果原环境有jdk则需要卸载。 先用命令查看 rpm -qa|grep java 如果有jdk则需要卸载rpm -e --nodeps java-1.7.0-openjdk-1.7.0.191-2.6.15.5.el7.x86_64rpm -e --nodeps java-1.8.0-openjdk-…

AugmentedReality之路-显示隐藏AR坐标原点(3)

本文介绍如何显示/隐藏坐标原点,分析AR坐标原点跟手机的位置关系 1、AR坐标原点在哪里 当我们通过AugmentedReality的StartARSession函数打开AR相机的那一刻,相机所在的位置就是坐标原点。 2、创建指示箭头资产 1.在Content/Arrow目录创建1个Actor类…

【旅游景点项目日记 | 第一篇】项目服务架构、数据库表设计

Gitee仓库地址:travel-server:景点旅游项目服务端 文章目录 1.项目服务架构2.数据库设计2.1用户服务—travel_ums2.1.1 ums_user—用户表 2.2景点服务—travel_ams2.2.1 ams_attraction—景点表1.2.2 ams_resource_type—资源类型表 2.3票务服务—trabel…

最优算法100例之09-数组中单独出现两次的数字

专栏主页:计算机专业基础知识总结(适用于期末复习考研刷题求职面试)系列文章https://blog.csdn.net/seeker1994/category_12585732.html 题目描述 一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。 题解报告 最优解…

如何使用 ArcGIS Pro 自动矢量化水系

对于某些要素颜色统一的地图,比如电子地图,可以通过图像识别技术将其自动矢量化,这里为大家介绍一下 ArcGIS Pro 自动矢量化水系的方法,希望能对你有所帮助。 数据来源 教程所使用的数据是从水经微图中下载的电子地图数据&#…

微软正在改进其AI驱动的Copilot在Microsoft Teams中的工作方式,为会议聊天、总结等引入了新的召唤助手方式

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗?订阅我们的简报,深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同,从行业内部的深度分析和实用指南中受益。不要错过这个机会,成为AI领…

Sublime 彻底解决中文乱码

1. 按ctrl,打开Console,输入如下代码: import urllib.request,os; pf Package Control.sublime-package; ipp sublime.installed_packages_path(); urllib.request.install_opener( urllib.request.build_opener( urllib.request.ProxyHand…

水电站泄洪预警广播系统方案

一、行业背景 近年来由于危险河道管理措施不到位,调峰电站泄水风险长期存在,信息通报制度缺失以及民众安全警觉性不高等因素导致的水电站在泄洪时冲走下游河道游客以及人民财产的事故频发。 我司通过物联网、云计算、大数据、人工智能等技术手段&#x…

《安富莱嵌入式周报》第335期:大量嵌入式书籍免费下载,CNC电机同步,智能家居比赛作品,EMF2024电子胸牌,Swift语言单片机编程,UDS Boot

周报汇总地址:嵌入式周报 - uCOS & uCGUI & emWin & embOS & TouchGFX & ThreadX - 硬汉嵌入式论坛 - Powered by Discuz! 视频版: https://www.bilibili.com/video/BV151421Q7P4/ 《安富莱嵌入式周报》第335期:大量嵌入…

Spring 事件广播机制详解

前言 写这篇文章的初衷源自对 Spring 框架中事件机制的好奇心。在编写观察者模式代码示例时,我突然想起了 Spring 框架中支持多事件监听的特性,例如ContextClosedEvent、ContextRefreshedEvent、ContextStartedEvent等等。传统的观察者模式通常是基于单…

JDK8的下载安装与环境变量配置教程

前言 官网下载:Java Archive Downloads - Java SE 8u211 and later 现在应该没人用32位的系统了吧,直接下载Windows x64 Installer jdk-8u391-windows-x64.exe 一、安装JDK 1. 打开jdk-8u391-windows-x64.exe 2. 直接下一步 3. 这个地方不要动他&…

剑指Offer题目笔记19(二分查找)

面试题68: 问题: ​ 输入一个排序的整形数组nums和一个目标值t,如果数组nums中包含t,则返回在数组中的下标,否则返回按照顺序插入到数组的下标。 解决方案: ​ 使用二分查找。每次二分查找都选取位于数组…