(超全)python图像处理详细解析(3)

图像处理

    • 23.保存视频每一帧图像
    • 24.把png图像转换成jpg并保存
    • 25.改变图像尺寸
    • 26.改变图像比例
    • 27.旋转图像
    • 28.亮度调整
    • 29.log对数调整
    • 30.判断图像对比度
    • 31.调整强度
      • (1)强度调节
      • (2)uint8转float
    • 32.绘制直方图和均衡化
    • 33.彩色图片三通道直方图

23.保存视频每一帧图像

import cv2
from skimage import io
import osclass AVILoader:def __init__(self, video_file):self.video_file = video_fileself.cap = cv2.VideoCapture(self.video_file)def __call__(self, frame):self.cap.set(cv2.CAP_PROP_POS_FRAMES, frame)ret, frame = self.cap.read()if ret:return cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)else:return Nonevideo_file = 'sp.mp4'
av_loader = AVILoader(video_file)frames = range(0, 100, 20)
output_folder = 'frames'
os.makedirs(output_folder, exist_ok=True)# 保存每一帧为图像文件
for frame in frames:img = av_loader(frame)if img is not None:filename = os.path.join(output_folder, f'frame_{frame}.jpg')io.imsave(filename, img)io.imshow(img)  # 显示图像io.show()       # 显示图像窗口# 创建图像集合
ic = io.ImageCollection(os.path.join(output_folder, '*.jpg'))
# 输出图像集合

在这里插入图片描述

24.把png图像转换成jpg并保存

from skimage import io, transform, color
import numpy as npdef convert_gray(f):rgb = io.imread(f)gray = color.rgb2gray(rgb)dst = transform.resize(gray, (256, 256))return dst# 指定文件夹路径
#data_dir = 'D:\rgzn\wl'  # 读取文件夹中的所有png文件
image_dir = 'D:/rgzn/wl'
str=image_dir+'/*.png'
coll = io.ImageCollection(str, load_func=convert_gray)# 保存处理后的图像
for i in range(len(coll)):
# 保存为jpg格式,注意文件路径和文件名的拼接
io.imsave("D:/rgzn/wl1" + np.str(i) + '.jpg', coll[i])  

在这里插入图片描述

25.改变图像尺寸

改变图片尺寸resize(200,200)
函数格式为:
skimage.transform.resize(image, output_shape)
image: 需要改变尺寸的图片
output_shape: 新的图片尺寸

from skimage import transform,data,io
import matplotlib.pyplot as plt
img=io.imread('mao.jpg')
a=img.shapeplt.subplot(2,2,1)
plt.title('1')
plt.imshow(img)plt.subplot(2,2,2)
plt.title('2')
dst=transform.resize(img,(700,500))
plt.imshow(dst)plt.subplot(2,2,3)
plt.title('3')
dst=transform.resize(img,(350,250))
plt.imshow(dst)plt.subplot(2,2,4)
plt.title('4')
dst=transform.resize(img,(175,125))
plt.imshow(dst)

在这里插入图片描述

26.改变图像比例

按比例缩放rescale

from skimage import transform,data,io
import matplotlib.pyplot as plt
img=io.imread('mao.jpg')plt.subplot(1,2,1)
plt.title('1')
plt.imshow(img)plt.subplot(1,2,2)
plt.title('2')
#将原始图像放缩到原来的0.1倍
dst=transform.rescale(img,0.1)
plt.imshow(dst)

在这里插入图片描述

27.旋转图像

旋转 rotate

from skimage import transform,data,io
import matplotlib.pyplot as plt# 读取图像
img = io.imread('mao.jpg')
print(img.shape)# 旋转图像
img1 = transform.rotate(img, 60)
print(img1.shape)img2 = transform.rotate(img, 30, resize=True)
print(img2.shape)# 使用同一个窗口显示两个旋转后的图像
plt.figure('resize')# 创建子图布局
plt.subplot(1, 2, 1)
plt.title('1')
plt.imshow(img1, plt.cm.gray)plt.subplot(1, 2, 2)
plt.title('2')
plt.imshow(img2, plt.cm.gray)# 显示窗口
plt.show()

在这里插入图片描述

28.亮度调整

图像亮度与对比度的调整,是放在skimage包的exposure模块里面
对原图像的像素,进行幂运算,得到新的像素值。公式中的g就是gamma值。
如果gamma>1, 新图像比原图像暗
如果gamma<1,新图像比原图像亮
函数格式为:skimage.exposure.adjust_gamma(image, gamma=1)
gamma参数默认为1,原像不发生变化 。

import numpy as np
from skimage import transform,exposure,img_as_float
import matplotlib.pyplot as pltimg=io.imread('iii.jpg')
#gam1是原始图像调暗3倍,而gam2是原始图像调亮0.1倍。
gam1= exposure.adjust_gamma(img,3)  #调暗
gam2= exposure.adjust_gamma(img,0.1)  #调亮
plt.figure('adjust_gamma',figsize=(8,8))plt.subplot(131)
plt.title('1')
plt.imshow(img,plt.cm.gray)
plt.axis('off')plt.subplot(132)
plt.title('2')
plt.imshow(gam1,plt.cm.gray)
plt.axis('off')plt.subplot(133)
plt.title('3')
plt.imshow(gam2,plt.cm.gray)
plt.axis('off')plt.show()

在这里插入图片描述

29.log对数调整

与gamma相反

import numpy as np
from skimage import transform,exposure,img_as_float,io
import matplotlib.pyplot as pltimg = io.imread('iii.jpg')
#使用exposure模块中的adjust_log函数对读取的图像进行对数变换
gam1 = exposure.adjust_log(img)
#创建一个名为'adjust_gamma'的图表,设置图表大小为(8,8)。
plt.figure('adjust_gamma',figsize=(8,8))plt.subplot(121)
plt.title('origin image')
#图中显示变量img的图像,使用灰度色彩映射。
plt.imshow(img,plt.cm.gray)
plt.axis('off')plt.subplot(122)
plt.title('log')
plt.imshow(gam1,plt.cm.gray)
plt.axis('off')plt.show()

在这里插入图片描述

30.判断图像对比度

函数:is_low_contrast(img)

from skimage import exposure,img_as_float,io
img1 = io.imread('liii.png')
#判断图像是否为低对比度图像
result=exposure.is_low_contrast(img1)
print(result)

运行结果:
False

31.调整强度

(1)强度调节

import numpy as np
from skimage import exposure
#创建一个包含三个元素的一维数组,元素值分别为51, 102, 153,数据类型为无符号8位整数。
image = np.array([51, 102, 153], dtype=np.uint8)
#rescale_intensity函数对输入的图像强度进行重新缩放
mat=exposure.rescale_intensity(image)
print(mat)

运行结果:
[ 0 127 255]

(2)uint8转float

通过img_as_float()函数将unit8类型转换为float型,实际上还有更简单的方法,就是乘以1.0

import numpy as np
image = np.array([51, 102, 153], dtype=np.uint8)
print(image*1.0)

运行结果:
[ 51. 102. 153.]

float类型的范围是[0,1],因此对float进行rescale_intensity 调整后,范围变为[0,1],而不是[0,255]

import numpy as np
from skimage import exposure
image = np.array([51, 102, 153], dtype=np.uint8)
tmp=image*1.0
#rescale_intensity函数对输入的图像强度进行重新缩放
mat=exposure.rescale_intensity(tmp)  
print(mat)

运行结果:
[0. 0.5 1. ]

32.绘制直方图和均衡化

绘图都可以调用matplotlib.pyplot库来进行,其中的hist函数可以直接绘制直方图。

n, bins, patches = plt.hist(arr, bins=10, normed=0, facecolor='black', edgecolor='black',alpha=1,histtype='bar')

hist的参数非常多,但常用的就这六个,只有第一个是必须的,后面四个可选
arr: 需要计算直方图的一维数组
bins: 直方图的柱数,可选项,默认为10
normed: 是否将得到的直方图向量归一化。默认为0
facecolor: 直方图颜色
edgecolor: 直方图边框颜色
alpha: 透明度
histtype: 直方图类型,‘bar’, ‘barstacked’, ‘step’, ‘stepfilled’

from skimage import io
import matplotlib.pyplot as pltimg = io.imread('iii.jpg')
img1 = io.imread('liii.png')plt.figure('hist')plt.subplot(221)  
plt.title('1')
plt.imshow(img)
plt.subplot(222)  
plt.title('2')
#绘制图像直方图
n, bins, patches = plt.hist(img.ravel(), bins=256, density=True, edgecolor='None', facecolor='black')
plt.axis('off')  plt.subplot(223)  
plt.title('3')
plt.imshow(img1)
plt.subplot(224)  
plt.title('4')
#绘制图像直方图
n, bins, patches = plt.hist(img1.ravel(), bins=256, density=True, edgecolor='None', facecolor='black')
plt.axis('off')  plt.show()

在这里插入图片描述

33.彩色图片三通道直方图

from skimage import io
import matplotlib.pyplot as pltimg=io.imread('iii.jpg')
ar=img[:,:,0].flatten()
plt.hist(ar,bins=256,density=True,facecolor='r',edgecolor='r')
ag=img[:,:,1].flatten()
plt.hist(ag,bins=256,density=True,facecolor='g',edgecolor='g')
ab=img[:,:,2].flatten()
plt.hist(ab,bins=256,density=True,facecolor='g',edgecolor='b')
plt.show()

在这里插入图片描述

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

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

相关文章

FR-E840-0120-4-60 三菱变频器5.5KW型

FR-E840-0120-4-60 三菱变频器替换FR-E740-5.5K FR-E840用户手册,FR-E840-0120-4-60价格,FR-E840-5.5K价格,FR-E840-0120-4-60外部连接图,FR-E740-5.5K替换产品。 FR-E740-5.5K-CHT逐渐开始停产&#xff0c;现在用新型号FR-E840-0120-4-60替换。 FR-E840-0120-4-60参数说明&…

Grafana系列 | Grafana监控TDengine库数据 |Grafana自定义Dashboard

开始前可以去grafana官网看看dashboard文档 https://grafana.com/docs/grafana/latest/dashboards 本文主要是监控TDengine库数据 目录 一、TDengine介绍二、Grafana监控TDengine数据三、Grafana自定义Dashboard 监控TDengine库数据1、grafana 变量2、添加变量3、配置panel 一…

牛客NC406 最长山脉【中等 穷举,动态规划 C++/Java/Go/PHP】

题目 题目链接&#xff1a; https://www.nowcoder.com/practice/f4e974a50eda429fbf36515a4197b148 思路 参考答案C class Solution {public:/*** 代码中的类名、方法名、参数名已经指定&#xff0c;请勿修改&#xff0c;直接返回方法规定的值即可*** param nums int整型vect…

分类预测 | Matlab实现CNN-GRU-SAM-Attention卷积门控循环单元融合空间注意力机制的数据分类预测

分类预测 | Matlab实现CNN-GRU-SAM-Attention卷积门控循环单元融合空间注意力机制的数据分类预测 目录 分类预测 | Matlab实现CNN-GRU-SAM-Attention卷积门控循环单元融合空间注意力机制的数据分类预测分类效果基本描述程序设计参考资料 分类效果 基本描述 1.Matlab实现CNN-GRU…

linux 编译 opencv遇到问题

linux环境下完整编译opencv会需要很多依赖库&#xff0c;但是只需要编译部分模块的话可以这样做 opncv4.8版本是可以用的&#xff0c;只列举主要的参数&#xff0c;其他参数省略 cmake .. -DBUILD_LISTcore,highgui 这样就只会编译core、highgui以及它们依赖的so&#xff0c;…

云计算和边缘计算究竟有什么不同

在数据时代&#xff0c;无论是人的活动还是机器的运作都会产生各种各样海量的数据。在对数据梳理和筛选过程中&#xff0c;计算机的运算处理必不可少。为了减少本地计算机算力成本等限制&#xff0c;越来越多的企业选择了云计算和边缘计算。今天&#xff0c;德迅云安全就带您来…

20.Nacos集群搭建

模拟Nacos三个节点&#xff0c;同一个ip,启动三个不同的端口&#xff1a; 节点 nacos1, 端口&#xff1a;8845 节点 nacos2, 端口&#xff1a;8846 节点 nacos3, 端口&#xff1a;8847 1.搭建数据库&#xff0c;初始化数据库表结构 这里我们以单点的数据库为例 首先新建一…

无人机+巡飞弹:“柳叶刀”巡飞弹技术详解

“柳叶刀”巡飞弹技术是一种结合了无人机和巡飞弹的先进武器系统&#xff0c;由俄罗斯ZalaAero公司研制&#xff0c;首次公开亮相是在2019年的俄罗斯军队装备展上。该系统以其高度的灵活性和精确打击能力&#xff0c;在现代战场上扮演着重要角色。 系统组成&#xff1a;柳叶刀巡…

探索和构建 LLaMA 3 架构:深入探讨组件、编码和推理技术(四)分组多查询注意力

探索和构建 LLaMA 3 架构&#xff1a;深入探讨组件、编码和推理技术&#xff08;四&#xff09;分组多查询注意力 Grouped-query Attention&#xff0c;简称GQA 分组查询注意力&#xff08;Grouped-query Attention&#xff0c;简称GQA&#xff09;是多查询和多头注意力的插值…

Blender基础操作

1.移动物体&#xff1a; 选中一个物体&#xff0c;按G&#xff0c;之后可以任意移动 若再按X&#xff0c;则只沿X轴移动&#xff0c;同理可按Y与Z 2.旋转物体&#xff1a; 选中一个物体&#xff0c;按R&#xff0c;之后可以任意旋转 若再按X&#xff0c;则只绕X轴旋转&…

Python自学之路--003:PyCharm新建工程之后安装的Python第三方库找不到问题

目录 1、概述 2、问题原因 3、解决办法 3.1、.py文件通过.bat不能调用 3.2、通过调用之前PyCharm工程的解释器找到库 3.3、重新安装一遍或将库Copy到新工程的.venv里面 1、概述 通过PyCharm新建一个工程的时候发现&#xff0c;之前安装的python库没了&#xff0c;如下图。…

【Linux】:文件查看 stat、cat、more、less、head、tail、uniq、wc

&#x1f3a5; 屿小夏 &#xff1a; 个人主页 &#x1f525;个人专栏 &#xff1a; Linux深造日志 &#x1f304; 莫道桑榆晚&#xff0c;为霞尚满天&#xff01; 文章目录 &#x1f4d1;前言一、stat&#xff08;查看文件详细属性信息&#xff09;1.1 内容解析&#xff1a;1.2…

【linux高性能服务器编程】项目实战——仿QQ聊天程序源码剖析

hello &#xff01;大家好呀&#xff01; 欢迎大家来到我的Linux高性能服务器编程系列之项目实战——仿QQ聊天程序源码剖析&#xff0c;在这篇文章中&#xff0c;你将会学习到如何利用Linux网络编程技术来实现一个简单的聊天程序&#xff0c;并且我会给出源码进行剖析&#xff…

远程控制安卓手机:便捷、高效与安全的方法

在移动设备的领域里&#xff0c;远程控制安卓手机的能力也变得越来越重要。这种技术可以让我们在远程地点方便地操作手机&#xff0c;无论是处理紧急事务、帮助他人解决问题&#xff0c;还是仅仅为了享受科技带来的便利。本文将为你介绍2种便捷、高效且安全的方法&#xff0c;让…

【智能算法】向日葵优化算法(SFO)原理及实现

目录 1.背景2.算法原理2.1算法思想2.2算法过程 3.结果展示4.参考文献 1.背景 2019年&#xff0c;GF Gomes等人受到自然界向日葵运动行为启发&#xff0c;提出了向日葵优化算法&#xff08;Sunflower Optimization, SFO&#xff09;。 2.算法原理 2.1算法思想 SFO模拟向日葵行…

【服务器部署篇】Linux下Ansible安装和配置

作者介绍&#xff1a;本人笔名姑苏老陈&#xff0c;从事JAVA开发工作十多年了&#xff0c;带过刚毕业的实习生&#xff0c;也带过技术团队。最近有个朋友的表弟&#xff0c;马上要大学毕业了&#xff0c;想从事JAVA开发工作&#xff0c;但不知道从何处入手。于是&#xff0c;产…

vue3【详解】vue3 比 vue2 升级了哪些重要的功能?

改用 createApp 初始化实例 vue2 使用 new Vue() 初始化实例 vue3 使用 Vue.createApp() 初始化实例 新增 emits 选项 vue3 选项式API中新增了emits 选项&#xff0c;用于显示声明组件中的自定义事件&#xff0c;自定义事件的名称&#xff0c;需用 on 开头。 export default {…

如何在vue3+vite中优雅的使用iconify图标

前言 从Vue2迁移到Vue3&#xff0c;在使用上有着很大的差别。本文的话主要是针对图标的使用差别上进行分析&#xff0c;同时给出基于iconify图标库中unplugin-icons的用法。这里特殊说明一下&#xff1a;其实element-plus中用到的图标也是基于iconify图标库的&#xff0c;在我们…

LT9611UXC双端口 MIPI DSI/CSI 转 HDMI2.0,带音频

1. 说明 LT9611UXC 是一款高性能 MIPI DSI/CSI 至 HDMI2.0 转换器。MIPI DSI/CSI 输入具有可配置的单端口或双端口&#xff0c;具有 1 个高速时钟通道和 1~4 个高速数据通道&#xff0c;工作速率最高为 2Gbps/通道&#xff0c;可支持高达 16Gbps 的总带宽。 LT9611UXC 支持突发…

13 c++版本的五子棋

前言 呵呵 这大概是 大学里面的 c 五子棋了吧 有一些 面向对象的理解, 但是不多 这里 具体的实现 就不赘述, 仅仅是 发一下代码 以及 具体的使用 然后 貌似 放在 win10 上面执行 还有一些问题, 渲染的, 应该很好调整 五子棋 #include<Windows.h> #include<io…