首页 > 其他分享 >图像数据处理1

图像数据处理1

时间:2024-08-11 23:23:38浏览次数:12  
标签:img image 图像 数据处理 path save cv

一、图像数据的表示与基本运算

1.1图像文件的读写与显示

1.1.1OpenCV读写与显示图像文件

①彩色图像转为灰度图像

import cv2 as cv
import sys
import os

# 从当前工作目录下读入一幅彩色图像
img_path = 'E:\PyCharm Community Edition 2024.1.1\image\slpn.jpg'#此处为绝对路径
img = cv.imread(img_path, cv.IMREAD_COLOR)#读取指定路径下的图像文件,并以彩色模式将其加载到img变量中

# 若没有正确读取图像,显示出错信息并退出运行
if img is None:
    sys.exit("Could not find the image! ")

# 转换为灰度图像
img_gray = cv.cvtColor(img, cv.COLOR_BGR2GRAY)#在 OpenCV 中,图像通常以 BGR(蓝、绿、红)格式存储,而不是常见的 RGB 格式

#调节输出图像尺寸
resize_width = 600 # 设定新的宽度
resize_height = 600 # 设定新的高度
img_resized = cv.resize(img, (resize_width, resize_height))
img_gray_resized = cv.resize(img_gray, (resize_width, resize_height))

# 显示原图,并使用调整尺寸后的图像
cv.imshow('Original Image', img_resized)

# 显示灰度图,并使用调整尺寸后的灰度图像
cv.imshow('Gray Image', img_gray_resized)

# 等待按键,之后关闭窗口
cv.waitKey(0)
cv.destroyAllWindows()

# 保存灰度图像路径,若路径不存在则创建该文件夹
save_dir = './image_save'
if not os.path.exists(save_dir):
    os.makedirs(save_dir)
save_path = os.path.join(save_dir, 'slpn_gray.jpg')
cv.imwrite(save_path, img_gray)

尽管我们的路径正确,但运行该代码会显示我们提前设置的报错“Could not find the image!”,原因是opencv无法识别汉字,所以今后在使用opencv打开文件时,文件路径中一定不要存在汉字。我们将圣灵谱尼改为其首字母缩写slpn后便能成功得到其灰度图。

重点代码详解与记忆
1.img = cv.imread(img_path, cv.IMREAD_COLOR)#读取指定路径下的图像文件,并以彩色模式将其加载到img变量中

imread函数存在于多个库中,用于读取图像文件并返回一个表示图像的数组,在cv.omread后输入(文件路径,以彩色的形式读取)


2.img_gray = cv.cvtColor(img, cv.COLOR_BGR2GRAY)#在 OpenCV 中,图像通常以 BGR(蓝、绿、红)格式存储,而不是常见的 RGB 格式

cv.cvtColor用于实现图像色彩空间的转换,随后输入(加载图像信息的变量,要转换的形式)

除了转换为灰度图以外,还有以下几种形式:

  • cv2.COLOR_BGR2GRAY:将 BGR 图像转换为灰度图像。
  • cv2.COLOR_BGR2HSV:将 BGR 图像转换为 HSV 图像。HSV 色彩空间对于颜色分割和跟踪非常有用。
  • cv2.COLOR_HSV2BGR:将 HSV 图像转换回 BGR 图像。
  • cv2.COLOR_BGR2RGB:将 BGR 图像转换为 RGB 图像。注意 OpenCV 默认读取的图像是 BGR 格式。
  • cv2.COLOR_RGB2BGR:将 RGB 图像转换回 BGR 图像。
  • cv2.COLOR_BGR2YCrCbcv2.COLOR_BGR2Labcv2.COLOR_BGR2Luv 等:将 BGR 图像转换为其他色彩空间,这些色彩空间在特定的图像处理任务中有其独特的用途。

3.#调节输出图像尺寸
resize_width = 600 # 设定新的宽度
resize_height = 600 # 设定新的高度
img_resized = cv.resize(img, (resize_width, resize_height))
img_gray_resized = cv.resize(img_gray, (resize_width, resize_height))

通过cv.resize实现对图像的尺寸调节,在其后输入(加载图像信息的变量,(设置的尺寸变量))

此时修改尺寸后的图像变量名分别为img_resized,img_gray_resized

4.# 保存灰度图像路径,若路径不存在则创建该文件夹
save_dir = './image_save'
if not os.path.exists(save_dir):
    os.makedirs(save_dir)

首先设置图片要保存的文件夹路径,调用os模块检验路径是否存在
save_path = os.path.join(save_dir, 'slpn_gray.jpg')

设置储存图片文件的名称,并拼接路径。
cv.imwrite(save_path, img_gray)

将灰度图片储存到指定的路径下。

此处是先设置好路径的名称,再储存图片,进而实现图片名称的设置,而非先设置图片的名称再进行储存

运行代码效果如下

②OpenCV读取摄像机视频图像帧代码

通过执行该代码可以打开电脑的摄像头,随后把没一帧的图片保存到image2_save的文件夹下。

import cv2
import os

# 初始化VideoCapture对象,参数0代表调用默认摄像机
cap = cv2.VideoCapture(0)

# 检查摄像机是否顺利开启
if not cap.isOpened():
    print("摄像机无法开启")
    exit()

# 指定帧的保存路径,若目录不存在,则创建该目录
frames_folder = 'image2_save'
if not os.path.exists(frames_folder):
    os.makedirs(frames_folder)

# 帧编号初始化
frame_count = 0

# 循环读取每一帧
while True:
    # 读取一帧画面
    ret, frame = cap.read()

    # 若帧读取失败,则退出循环
    if not ret:
        print("视频帧读取失败")
        break

        # 构造保存帧的文件名,包含编号以防重名
    frame_filename = os.path.join(frames_folder, f'photo_{frame_count:05d}.jpg')

    # 保存当前帧
    cv2.imwrite(frame_filename, frame)

    # 显示当前帧(可选操作)
    cv2.imshow('摄像机画面', frame)

    # 帧编号递增
    frame_count += 1

    # 等待1毫秒,若期间按下'q'键,则退出循环
    if cv2.waitKey(1) == ord('q'):
        break

# 释放VideoCapture资源
cap.release()
# 关闭所有OpenCV创建的窗口
cv2.destroyAllWindows()

运行代码效果如下

重点代码详解与记忆

1.# 初始化VideoCapture对象,参数0代表调用默认摄像机
cap = cv2.VideoCapture(0)

摄像机用来捕获视频,英语翻译常常与汉语相反:VideoCapture

2.# 帧编号初始化
frame_count = 0

# 循环读取每一帧
while True:
    # 读取一帧画面
    ret, frame = cap.read()

    # 若帧读取失败,则退出循环
    if not ret:
        print("视频帧读取失败")
        break

ret:一个布尔值,如果成功读取帧,则为True;如果读取帧失败或已经到达视频的末尾,则为False

frame:一个NumPy数组,表示捕获到的视频帧。如果retTrue,则frame包含了有效的图像数据;如果retFalse,则frame可能是一个空数组或包含无效数据。

3 . # 构造保存帧的文件名,包含编号以防重名
    frame_filename = os.path.join(frames_folder, f'photo_{frame_count:05d}.jpg')

拼接出图像的保存路径,通过循环使frame_count的数值依次加1,避免了图片的重名,并为图片标号。

    # 保存当前帧
    cv2.imwrite(frame_filename, frame)

    # 显示当前帧(可选操作)
    cv2.imshow('摄像机画面', frame)

    # 帧编号递增
    frame_count += 1

    # 等待1毫秒,若期间按下'q'键,则退出循环
    if cv2.waitKey(1) == ord('q'):
        break

③OpenCV读取视频图像文件帧代码

通过执行该代码,可以将视频图像文件按帧读取,并把每一帧保存到指定文件夹下。

import cv2
import os

# 指定视频文件的路径
video_path = 'E:\PyCharm Community Edition 2024.1.1\image/2024-08-07 152918.mp4'
# 创建VideoCapture对象以读取视频
cap = cv2.VideoCapture(video_path)

# 检查VideoCapture对象是否成功打开视频文件
if not cap.isOpened():
    print("无法打开视频文件")
    exit()

# 定义保存帧的文件夹名称
frames_folder = 'image3_save'
# 若文件夹不存在,则创建它
if not os.path.exists(frames_folder):
    os.makedirs(frames_folder)

# 初始化帧计数器
frame_count = 0

# 循环读取视频的每一帧
while True:
    # 读取一帧
    ret, frame = cap.read()
    # 若帧读取失败,则退出循环
    if not ret:
        print("视频帧读取失败")
        break

        # 构造保存帧的文件名
    frame_filename = os.path.join(frames_folder, f'photo_{frame_count:05d}.jpg')
    # 保存帧到文件
    cv2.imwrite(frame_filename, frame)

    # 帧计数器递增
    frame_count += 1

# 释放VideoCapture对象资源
cap.release()
# 关闭所有OpenCV创建的窗口(本例中未使用imshow,但通常是个好习惯)
cv2.destroyAllWindows()

重点代码详解与记忆

该代码与OpenCV读取摄像机视频图像帧代码基本一致,只是用一个文件路径替换了其的实时录像功能。

再接下来的部分中,再整段代码中进行解释,这样更加直观,解释部分用其他颜色进行标注。

运行代码后视频帧被读取并成功保存到image3_save文件夹下

1.1.2Matplotlib读取图像文件的应用

①Matplotlib显示OpenCV读取的彩色图像,在Opencv中图像以BGR格式储存,通过Matplotlib来展示RGB格式储存的图像。

import numpy as np
import cv2 as cv
import matplotlib.pyplot as plt
# 从当前工作目录下的imagedata子目录中读入一幅彩色图像
image_path = 'E:\PyCharm Community Edition 2024.1.1\image\slpn.jpg'
img = cv.imread(image_path, cv.IMREAD_COLOR)

# 检查图像是否成功读取
if img is None:
    print(f"Error: Unable to read image at {image_path}")
else:
    # 将图像颜色通道顺序从BGR调整为RGB
    imgRGB = cv.cvtColor(img, cv.COLOR_BGR2RGB)

    # 创建一个显示窗口并显示原BGR色序图像
    plt.figure()
    plt.imshow(img)  # 注意这里我们仍然需要翻转通道以在matplotlib中正确显示
    plt.title('Color image in BGR')

    # 创建一个显示窗口并显示色序调整为RGB后的彩色图像
    plt.figure()
    plt.imshow(imgRGB)
    plt.title('Color image in RGB')

    # 显示所有图像窗口
    plt.show()

重点代码详解与记忆

import numpy as np
import cv2 as cv
import matplotlib.pyplot as plt
# 从当前工作目录下的imagedata子目录中读入一幅彩色图像
image_path = 'E:\PyCharm Community Edition 2024.1.1\image\slpn.jpg'
img = cv.imread(image_path, cv.IMREAD_COLOR)

# 检查图像是否成功读取
if img is None:
    print(f"Error: Unable to read image at {image_path}")
else:
    # 将图像颜色通道顺序从BGR调整为RGB
    imgRGB = cv.cvtColor(img, cv.COLOR_BGR2RGB)

    通过cvtColo将RGB形式储存的图像改为RGB形式

    # 创建一个显示窗口并显示原BGR色序图像
    plt.figure()
    plt.imshow(img)  # 注意这里我们仍然需要翻转通道以在matplotlib中正确显示
    plt.title('Color image in BGR')

    # 创建一个显示窗口并显示色序调整为RGB后的彩色图像
    plt.figure()
    plt.imshow(imgRGB)
    plt.title('Color image in RGB')

    # 显示所有图像窗口
    plt.show()

运行代码结果如下

1.1.3Scikit-image读写图像文件

彩色图像转为灰度图像,操作与opencv类似

import numpy as np
import cv2 as cv
import matplotlib.pyplot as plt
from skimage import io, data, color, util
from pathlib import Path  # 用于处理文件路径

# 从指定路径读入一幅彩色图像
image_path = Path('E:\PyCharm Community Edition 2024.1.1\image\slpn.jpg')
img = io.imread(image_path)

# 使用skimage中的color模块将彩色图像转换为灰度图像
img_gray = color.rgb2gray(img)

# 将灰度图像的数据类型由浮点小数[0,1]转换为uint8型[0,255]
img_gray = util.img_as_ubyte(img_gray)

# 保存灰度图像到image1_save文件夹下
save_folder = Path('image1_save')
save_folder.mkdir(parents=True, exist_ok=True)  # 如果文件夹不存在,则创建它
save_path = save_folder / 'saved_image.jpg'
io.imsave(save_path, img_gray)

重点代码详解与记忆

import numpy as np
import cv2 as cv
import matplotlib.pyplot as plt
from skimage import io, data, color, util
from pathlib import Path  # 用于处理文件路径

# 从指定路径读入一幅彩色图像
image_path = Path('E:\PyCharm Community Edition 2024.1.1\image\slpn.jpg')
img = io.imread(image_path)

此处直接输入图片路径即可,无需输入图片的色彩形式

# 使用skimage中的color模块将彩色图像转换为灰度图像
img_gray = color.rgb2gray(img)

# 将灰度图像的数据类型由浮点小数[0,1]转换为uint8型[0,255]
img_gray = util.img_as_ubyte(img_gray)

该操作有利于避免数据不兼容问题、提高运算速率、提高图像清晰度

# 保存灰度图像到image1_save文件夹下
save_folder = Path('image1_save')
save_folder.mkdir(parents=True, exist_ok=True)  # 如果文件夹不存在,则创建它
save_path = save_folder / 'saved_image.jpg'
io.imsave(save_path, img_gray)

运行代码,图像被成功保存

1.1.4pillow读写图像文件

①利用pillow将图像转化为灰度图像与RGB格式储存的图像

from PIL import Image
import numpy as np
import os

# 从指定路径读入一幅彩色图像
im = Image.open('E:\PyCharm Community Edition 2024.1.1\image\slpn.jpg')

# 调用Image对象成员函数将其转换为灰度图像
imgray = im.convert('L')  # 结果仍为PIL图像类

# 调用Image对象成员函数将其转换为RGB真彩色图像,结果仍为PIL图像类
imrgb = im.convert('RGB')

# 显示图像的文件格式、宽、高尺寸以及图像类型
print(im.format, im.size, im.mode)


# 指定保存目录
save_dir = 'image1_save'

# 如果保存目录不存在,则创建它
if not os.path.exists(save_dir):
    os.makedirs(save_dir)

# 构建完整的保存路径
save_path = os.path.join(save_dir, 'slpn.jpg')

# 将图像保存到指定路径
imgray.save(save_path)  # 保存RGB图像到指定文件夹

重点代码详解与记忆

from PIL import Image
import numpy as np
import os

# 从指定路径读入一幅彩色图像
im = Image.open('E:\PyCharm Community Edition 2024.1.1\image\slpn.jpg')

# 调用Image对象成员函数将其转换为灰度图像
imgray = im.convert('L')  # 结果仍为PIL图像类

转为灰度图像用“L“,而非"Grey"

# 调用Image对象成员函数将其转换为RGB真彩色图像,结果仍为PIL图像类
imrgb = im.convert('RGB')

# 显示图像的文件格式、宽、高尺寸以及图像类型
print(im.format, im.size, im.mode)

# 指定保存目录
save_dir = 'image1_save'

# 如果保存目录不存在,则创建它
if not os.path.exists(save_dir):
    os.makedirs(save_dir)

# 构建完整的保存路径
save_path = os.path.join(save_dir, 'slpn.jpg')

# 将图像保存到指定路径
imgray.save(save_path)  # 保存RGB图像到指定文件夹

运行后图像被成功保存

注,本人为在校学生,博客是边学边写的,主要是为了巩固知识,如有错误请积极指正。

“本文章中所使用的圣灵谱尼图片来源于网络,版权归属原作者所有。若您认为本文章/作品的使用侵犯了您的权益,请及时与我联系,我将尽快核实并删除相关内容。

标签:img,image,图像,数据处理,path,save,cv
From: https://blog.csdn.net/2301_80400361/article/details/140960383

相关文章

  • 图像分割算法
    5.1阈值分割(Thresholding)介绍阈值分割是一种简单而有效的图像分割方法,通过设置一个或多个阈值,将图像分割为前景和背景区域。常见的阈值分割方法包括全局阈值、自适应阈值和Otsu阈值。原理阈值分割通过比较像素值与设定的阈值,将像素分类为前景或背景。公式在阈值分割......
  • 电子商务图像生成技术:AI驱动的自动化流程
    摘要:本文介绍了一种基于人工智能技术的电子商务图像生成系统,该系统能够自动化地完成商品图像的生成过程。通过简单的三个步骤,用户可以快速生成高质量的电商主图和头图,从而提高工作效率并降低成本。**关键词:**人工智能,电商图像,自动化生成,图像处理1.引言在电子商务领域,高质......
  • AI在医学领域:nnSynergyNet3D高精度分割肝硬化肝脏体MRI图像
    关键词:肝硬化肝脏分割、协同深度学习模型、跨模态泛化    肝硬化是慢性肝病(CLD)的最后阶段,是一个重大的全球性健康问题。2019年,它是全球死亡原因的第11位,占全球死亡人数的2.4%。尽管病毒性肝炎仍然是终末期肝病的主要原因,但与代谢功能障碍相关的脂肪肝病(MASLD)预计将由于......
  • 利用OpenCvSharp进行图像相关操作
    前言程序设计过程,有时也需要对图像进行一些简单操作,C#没有现成的图像处理库,但有人对OpenCV进行了包装,我们可以很方便的使用OpenCvSharp对图像进行操作。当然了,这也需要使用的人员进行一些研究,但相对于C++版本,它已经非常友好了。1、显示图像代码:privatevoidbutton1_Click(......
  • 【Rust光年纪】探秘Rust地理空间数据处理利器:详解六大库
    探秘Rust地理空间数据处理与索引库:六大利器揭秘前言地理空间数据处理和空间索引是当今许多应用程序的重要组成部分,因此使用Rust语言开发的相关库具有极大的实用价值。本文将介绍几个用于处理地理空间数据和进行空间索引的Rust库,包括quadtree-rs、spatial、R-tree、Geosp......
  • 【大作业-17】使用TensorFlow快速实现图像风格迁移系统
    使用TensorFlow快速实现图像风格迁移系统资源地址:28-基于Tensorflow的风格迁移+代码+模型+系统界面+教学视频.zip资源-CSDN文库视频地址:[使用Tensorflow实现图像风格迁移系统_哔哩哔哩_bilibili](https://www.bilibili.com/video/BV1VE421w7RY/)随着GPT的横空出世,生成......
  • Ai绘画|如何安装使用最简单的秋叶版ComfyUI 整合包,万字长文手把手详细教你安装部署,快速
    大家好,我是灵魂画师向阳AI绘画界的国内开源大神——B站的秋叶大佬在1月份就已经发布了AI绘画工具ComfyUI的整合包。用户将压缩包下载后,能够一键启动comfyui。其便利性与之前的webui整合包如出一辙。然而在整合包下载完成后,新手或许会遭遇插件以及模型缺失的情况,同......
  • 图像滤波算法
    3.1平滑滤波器(SmoothingFilters)介绍平滑滤波器用于去除图像中的噪声,使图像更加平滑和柔和。常见的平滑滤波器包括均值滤波和高斯滤波。原理平滑滤波器通过对像素及其邻域像素的值进行平均或加权平均,来减少图像中的噪声。均值滤波采用简单的均值计算,而高斯滤波则使用加......
  • opencv图像增强一:传统图像去噪方法整理
    一、简介:在数字图像处理领域,噪声一直是影响图像质量的重要因素。无论是拍摄过程中的环境干扰,还是传输过程中的信号失真,噪声都可能导致图像模糊、细节丢失,甚至影响后续的图像分析和应用。为了提高图像的视觉效果和使用价值,图像去噪技术应运而生,成为图像预处理环节中不可或缺......
  • 基于AI的图像生成技术:商汤科技的SenseMirage平台
    摘要:本文介绍了商汤科技推出的AI内容创作社区平台SenseMirage,该平台利用自研的AIGC大模型,实现了快速、高质量的图像生成技术。**关键词:**人工智能,图像生成,内容创作,风格模型1.引言随着人工智能技术的不断进步,AI在艺术创作领域的应用日益广泛。商汤科技作为AI领域的先行者,......