skimage图像处理(五)

多数量图像处理(批量化处理)

多数量图片内读取指定图片     

首先导入skimage.io模块并将其简称为io,导入skimage库中的data_dir模块,用于获取示例图像的目录路径

import skimage.io as io

from skimage import data_dir

构建一个字符串,表示要匹配的文件模式,这里假设data_dir包含示例图像

使用io.ImageCollection创建一个集合,包含data_dir目录下所有匹配str模式的图像

str=data_dir + '/*.png'

coll = io.ImageCollection(str)

打印集合中图像的数量,使用io.imshow显示集合中第三个图像

print(len(coll))

io.imshow(coll[2])  #集合中第一张图片为0

显示效果:

批量读取目录中的所有.jpg文件

批量读取目录中的所有.jpg文件,并将它们转换为灰度图像,使用io.imshow显示集合中第一个图像。

导入skimage.io模块,用于图像读取,导入skimage库中的color模块,用于颜色处

from skimage import data_dir, io, color

定义一个函数convert_gray,用于将图像转换为灰度图,使用io.imread读取图像,使用color.rgb2gray将RGB图像转换为灰度图像

def convert_gray(f):

    rgb = io.imread(f) 

    return color.rgb2gray(rgb) 

定义一个字符串,表示要匹配的文件模式,这里假设img包含图像文件路径

img = r"C:\Users\AAA\Desktop\新建文件夹"

使用io.ImageCollection创建一个集合,包含img目录下所有匹配str模式的图像,打印集合中图像的数量

str = img + '/*.jpg'

coll = io.ImageCollection(str, load_func=convert_gray)

print(len(coll))

使用io.imshow显示集合中第一个图像

io.imshow(coll[0])

显示效果:

图像批量处理在视频中引用

SP.mp4这个视频中每隔10帧的图片读取出来,放在图片集合中(视频应用自己的视频时请改变路径其余代码不变)

导入cv2库用于视频处理,skimage.io用于图像读取,os库用于文件操作

import cv2

from skimage import io

import os

定义了一个名为AVILoader的类,该类用于从视频文件中加载帧,并将其转换为RGB格式。这个类实现了__call__方法,使其可以作为函数调用。

class AVILoader:

    def __init__(self, video_file):

        self.video_file = video_file

        self.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 None

定义视频文件路径,创建一个AVILoader对象

video_file =r"C:\Users\AAA\Desktop\1\SP.mp4"

av_loader = AVILoader(video_file)

定义要提取的帧的范围,这里从0开始,每3帧提取一次,共提取4帧

frames = range(0, 12, 3)

定义输出文件夹路径

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'))

import cv2

from skimage import io

import os

创建AVILoader类

class AVILoader:

    def __init__(self, video_file):

        self.video_file = video_file

        self.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 None

video_file =r"C:\Users\AAA\Desktop\1\SP.mp4"

av_loader = AVILoader(video_file)

frames = range(0, 12, 3)

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'))

显示效果:(可上下滑动显示)

依次读取rgb图片并转换为灰度图,将jpg形式转换为png形式保存在文件夹内

最后保存显示为所取图片的灰度化png形式图像

from skimage import data_dir,io,transform,color

import numpy as np

def convert_grey(f):

        rgb=io.imread(f)     #依次读取rgb图片

        grey=color.rgb2grey(rgb)   #rgb图片转换成灰度图

        dst=transform.resize(grey,(256,256))   #将灰度图片大小转换为256*256

        return dst

img='C:/Users/AAA/Desktop/1'

str=img+'/*.jpg'

coll = io.ImageCollection(str,load_func=convert_gray)

for i in range(len(coll)):

循环保存图片

io.imsave('C:/Users/AAA/Desktop/1/'+np.str(i)+'.png',coll[i])           

效果显示:

出现这种红色提示为正常现象

最后文件夹内显示效果如下

图像变形与缩放

改变图像尺寸

改变新图像尺寸为resize(200,200),函数格式如下skimage.transform.resize(image, output_shape)

image为需要改变尺寸的图片,output_shape为新的图片尺寸

导入transform模块用于图像大小调整,以及matplotlib的pyplot模块用于图像显示

from skimage import transform

import matplotlib.pyplot as plt

读取图像,使用transform.resize调整图像大小为200x200像素,创建一个新的图像窗口,命名为'resize'

img =io.imread('c.jpg')

dst=transform.resize(img, (200, 200))

plt.figure('resize')

在当前图像窗口中创建一个新的子图,位于1行2列的第1个位置,在当前子图上添加标题'before resize',使用imshow显示图像img,并使用plt.cm.gray灰度

plt.subplot(1,2,1)

plt.title('before resize')

plt.imshow(img,plt.cm.gray)

在当前图像窗口中创建一个新的子图,位于1行2列的第2个位置,在当前子图上添加标题'before resize',使用imshow显示图像img,并使用plt.cm.gray灰度

plt.subplot(1,2,2)

plt.title('before resize')

plt.imshow(dst,plt.cm.gray)

plt.show()

显示效果:

按比例缩放图像

from skimage import transform,data,io

img =io.imread('c.jpg')

print(img.shape)  #图片原始大小

print(transform.rescale(img, 0.5).shape)  #缩小为原来图片大小的0.5倍

print(transform.rescale(img, [0.2,0.25,0.2]).shape) #缩小为原来图片行数一半,列数四分之一,位置一半

print(transform.rescale(img, 3).shape)  #放大为原来图片大小的3倍

io.imshow(img)  #显示图像

显示效果:

图像旋转

函数格式skimage.transform.rotate(image, angle[, ...],resize=False)

from skimage import transform,data,io

import matplotlib.pyplot as plt

img = io.imread('c.jpg')

print(img.shape)    #图片原始大小

img1=transform.rotate(img, 60)  #旋转60度,不改变大小

print(img1.shape)

img2=transform.rotate(img, 30,resize=True) #旋转30度,同时改变大小

print(img2.shape)

plt.figure('resize')

plt.subplot(1,2,1)

plt.title('rotate 60')

plt.imshow(img1,plt.cm.gray)

plt.subplot(1,2,2)

plt.title('rotate 30')

plt.imshow(img2,plt.cm.gray)

plt.show()

显示效果:

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

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

相关文章

Spring Boot 自动配置-响应式编程-022

🤗 ApiHug {Postman|Swagger|Api...} = 快↑ 准√ 省↓ GitHub - apihug/apihug.com: All abou the Apihug apihug.com: 有爱,有温度,有质量,有信任ApiHug - API design Copilot - IntelliJ IDEs Plugin | Marketplace The Next Generation API Development Platform…

海狐外卖多商户O2O商城系统前端技术实现与探索

摘要: 随着外卖市场的快速发展,多商户O2O商城系统成为餐饮行业数字化转型的重要工具。本文基于海狐外卖多商户O2O商城系统的前端技术实现,探讨了前端技术在高并发、多端适配、自定义装修等方面的应用与挑战,并分享了系统前端架构…

IT行业现状与探索未来发展趋势

​​​​​​​ 我眼中的IT行业现状与未来趋势 随着技术的不断进步,IT行业已成为推动全球经济和社会发展的关键力量。从云计算、大数据、人工智能到物联网、5G通信和区块链,这些技术正在重塑我们的生活和工作方式。你眼中IT行业的现状及未来发展趋势是…

综合性练习-验证码

1. 验证码案例 随着安全性的要求越来越高,目前项目中很多都使用了验证码,验证码的形式也是多种多样,更复杂的图形验证码和⾏为验证码已经成为了更流⾏的趋势. 2. 需求 界面如下图所示 1. 页面生成验证码 2. 输入验证码,点击提交,验证用户输入验证码是否正确,正确则进行页面跳…

MySQL第一次作业(基本操作)

目录 一、登陆数据库 二、创建数据库zoo 三、修改数据库zoo字符集为gbk 四、选择当前数据库为zoo 五、查看创建数据库zoo信息 六、删除数据库zoo 一、登陆数据库 指令: mysql -u root -p 二、创建数据库zoo 指令: create database zoo; 三、修改数…

2024新零售行业多元化用工报告

来源:君润人力 近期历史回顾:

Springboot开发 -- Postman 调试 session 验证 接口

当我们在开发Spring Boot应用时,经常会遇到带有Session验证的接口,这些接口需要用户先登录并获取到Session ID(或称为cookie中的JSESSIONID),然后在后续的请求中携带这个Session ID来保持会话状态。下面我将以一个实际…

STM32 FSMC接口控制SRAM(芯片型号:IS61WV102416BLL)

目录 概述 1 硬件介绍 1.1 SRAM的电路 1.2 IS61WV102416ALL芯片 2 STM32Cube配置工程 2.1 配置FSMC 2.2 其他参数配置 2.3 生成工程 3 SRAM的功能验证 3.1 编写测试函数 3.1.1 写数据函数 3.1.2 读数据函数 3.2 完整代码 4 测试 测试代码下载地址: s…

代码随想录——二叉树的最大深度(Leetcode104)

题目链接 层序遍历 当遍历到二叉树每一层最后一个节点时,depth /*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode() {}* TreeNode(int val) { this.val val; }* …

UART 16550 IP核使用详解

AXI UART 16550是Xilinx FPGA中提供的一个UART IP核,它允许通过AXI接口与UART设备进行通信。本文描述了如何使用Xilinx的Vivado Design Suite环境中的工具来定制和生成 UART 16550 IP核,以及如何配置和使用该IP核。 1 UART 16550 IP核的使用 以下是针对…

【算法】网络图中的dfs

快乐的流畅:个人主页 个人专栏:《算法神殿》《数据结构世界》《进击的C》 远方有一堆篝火,在为久候之人燃烧! 文章目录 引言一、单词搜索二、黄金矿工三、不同路径 |||四、图像渲染五、岛屿数量六、岛屿的最大面积七、被围绕的区域…

SSD与HDD仍然共存,并将长期共存!

在技术快速迭代的今天,固态硬盘(SSD)与传统硬盘(HDD)之间的竞争一直是存储领域的一大焦点。 扩展阅读: HDD回暖于2024,与SSD决战于2028 HDD的烦恼:HAMR会让SMR黯然失色吗&#xff…

Github 2024-05-12 php开源项目日报 Top10

根据Github Trendings的统计,今日(2024-05-12统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量PHP项目10Filament: 加速Laravel开发的完美起点 创建周期:1410 天开发语言:PHP协议类型:MIT LicenseStar数量:12228 个Fork数量:1990 次关…

电路元件伏安特性的测量

实验目的: 1. 掌握线性电阻、非线性电阻元件伏安特性的测量方法; 2. 掌握伏安测量法中测量样点的选择和绘制曲线的方法; 3. 学习直读式仪表和直流稳压电源等设备的使用方法。 实验原理、内容及步骤: 电路元件的特性一般可用该元…

前端简史之崛起:Router迁鼎

引 💡 Ajax 的出现,带来了 jQuery 时代;Node技术的发展,带来了前端工程化进阶;如果说前面二者是带来技术的革命,那么前端路由方案的多样化则带来了用户体验的升级以及项目管理的优化。 课程简介 《前端简史…

train_gpt2_fp32.cu - main

llm.c/test_gpt2_fp32.cu at master karpathy/llm.c (github.com) 源码 // ---------------------------------------------------------------------------- // main training loop int main(int argc, char *argv[]) {// read in the (optional) command line argumentsco…

C语言性能深度剖析:从底层优化到高级技巧及实战案例分析

C语言以其接近硬件的特性、卓越的性能和灵活性,在系统编程、嵌入式开发和高性能计算等领域中占据着举足轻重的地位。本文将深入探讨C语言性能优化的各个方面,包括底层原理、编译器优化、内存管理和高级编程技巧,并结合多个代码案例来具体分析…

6大部分,20 个机器学习算法全面汇总!!建议收藏!(上篇)

前两天有小伙伴说想要把常见算法的原理 公式汇集起来。 这样非常非常方便查看!分为上下两篇,下篇地址: 本次文章分别从下面6个方面,涉及到20个算法知识点: 监督学习算法 无监督学习算法 半监督学习算法 强化学习…

PyQt5多线程全面系统地学习

文章目录 1. 基础知识1.1 简介1.1.1 多线程与多进程的概念多线程 (Multithreading)多进程 (Multiprocessing)1.1.2 多线程与多进程的区别1.1.3 应用场景多线程应用场景多进程应用场景 1.2 Python标准库中的线程与进程库1.2.1 threading 模块基本概念1.2.2 总结 2. PyQt5的多线程…

pytorch_trick(2) 在Jupyter初始化过程中自动加载常用包的设置方法

一、在Jupyter初始化过程中自动加载常用包的设置方法 在每一节课程的开头,我们都要导入常用包,由于这项工作重复而固定,因此我们也可以通过配置jupyter(准确来说应该是ipython)的startup文件,来使得每次新创…