python使用opencv对图像的基本操作(3)

17.颜色空间的转换

17.1.rgb图像转gray图像

from skimage import io,color
img = io.imread('lbxx.jpg')
img_gray = color.rgb2gray(img) #将rgb图像转换成gray图像
io.imshow(img_gray)

运行结果:
在这里插入图片描述

17.2.rgb图像转hsv图像

from skimage import io,color
img = io.imread('lbxx.jpg')
img_hsv = color.rgb2hsv(img) #将rgb图像转换成hsv图像
io.imshow(img_hsv)

运行结果:
在这里插入图片描述

17.3.将lab图像转成rgb图像

from skimage import io,color
img = io.imread('lbxx.jpg')
img_lab = color.lab2rgb(img) #将lab图像转换成rgb图像
io.imshow(img_lab)

运行结果:

在这里插入图片描述

17.4.将hsv图像转成rgb图像

from skimage import io,color
img = io.imread('lbxx.jpg')
gray = color.hsv2rgb(img) #将hsv图像转换成rgb图像
io.imshow(gray)

运行结果:

在这里插入图片描述

17.5将rgb图片转成lab图片

from skimage import io,color
img = io.imread('lbxx.jpg')
img_lab = color.rgb2lab(img) #将rgb图像转换成lab图像
io.imshow(img_lab)

注:
(1).HSV(hue,saturation,value)表示色相、饱和度和亮度。
(2).Lab中的L分量用于表示像素的亮度,取值范围是[0,100],表示从纯黑到纯白;
a表示从红色到绿色的范围,取值范围是[127,-128];
b表示从黄色到蓝色的范围,取值范围是[127,-128]。
运行结果:
在这里插入图片描述

17.6.用函数替代的方式将rgb图片转成hsv图片

from skimage import io,color
img = io.imread('lbxx.jpg')
hsv=color.convert_colorspace(img,'RGB','HSV') 
#convert是颜色空间,colorspace是颜色通道
io.imshow(hsv)

注:convert是颜色空间,colorspace是颜色通道。
运行结果:
在这里插入图片描述

17.7.对图片进行着色

from skimage import io,data,color
import numpy as np
img=io.imread('lbxx.jpg')
img_gray=color.rgb2gray(img)#将RGB图像转换为灰度图像。
rows,cols=img_gray.shape
labels=np.zeros([rows,cols]) #这个数组中的每个元素都被初始化为零。
for i in range(rows):
    for j in range(cols):
        if(img_gray[i,j]<0.4):
            labels[i,j]=0
        elif(img_gray[i,j]<0.75):
            labels[i,j]=1
        else:
            labels[i,j]=2
dst=color.label2rgb(labels)
io.imshow(dst)

注:for循环遍历灰度图像的每个像素,根据其灰度值将标签数组的相应位置赋值为0、1或2。具体来说,灰度值小于0.4的像素被标记为0,灰度值在0.4到0.75之间的像素被标记为1,灰度值大于0.75的像素被标记为2。
运行结果:
在这里插入图片描述

18.用figure函数和subplot函数分别创建主窗口与子图

18.1. 显示图片的三个通道

from skimage import data
import matplotlib.pyplot as plt
img=io.imread('lbxx.jpg')
plt.figure(num='astronaut',figsize=(8,8)) #创建一个名为astronaut的窗口,并设置大小 

plt.subplot(2,2,1)  #将窗口分为两行两列四个子图,则可显示四幅图片
plt.title('lbxx')  #标题
plt.imshow(img) #显示图片

plt.subplot(2,2,2)
plt.title('R')
plt.imshow(img[:,:,0],plt.cm.gray)
plt.axis('off')

plt.subplot(2,2,3)
plt.title('G')
plt.imshow(img[:,:,1],plt.cm.gray)
plt.axis('off')

plt.subplot(2,2,4)
plt.title('B')
plt.imshow(img[:,:,2],plt.cm.gray)
plt.axis('off') #不显示坐标尺寸

plt.show() #检测、显示窗口

运行结果:

在这里插入图片描述

18.2. 批量读取图片

import skimage.io as io
from skimage import data_dir,data
# img1 = io.imread('lbxx.jpg')
str = data_dir+'/*.png'
#创建了一个ImageCollection对象,包含指定路径下所有匹配的图像。
coll = io.ImageCollection(str)
print(len(coll))
io.imshow(coll[1])

注:str = data_dir + '/*.png’这行代码定义了一个字符串,用于指定包含PNG图像的目录。
运行结果:

在这里插入图片描述

18.3. 批量转换为灰度图

from skimage import data_dir,io,color
def as_gray(f):
    rgb=io.imread('lbxx.jpg')
    return color.rgb2gray(rgb)

str = data_dir + '/*.png'
coll = io.ImageCollection(str,load_func=as_gray)
io.imshow(coll[0])

注:读取一个目录中的所有PNG图像,将它们转换为灰度图像,并显示其中的第一张灰度图像。
*灰度化的方法:
as_gray=True
camp = gray/plt.cm.gray
color.rgb2gray(img)
Plt.cm.gray
运行结果:
在这里插入图片描述

18.4. 显示视频,并将视频中每10帧的图片读取出来放到集合中

import cv2
from skimage import io
import os

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 = 'll.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'))
# 输出图像集合

注:cv2:OpenCV库,用于视频处理; io:skimage库的输入输出模块,用于图像的读写和显示; os:用于操作文件和目录。
运行结果:
在这里插入图片描述

18.5. jpg格式和png格式的转换和保存

from skimage import io,transform,color
import numpy as np

def as_gray(f):
    rgb = io.imread(f)
    gray=color.rgb2gray(rgb)
    dst=transform.resize(gray,(256,256))
    return dst
img1 = "C:/1/tupian"
str=img1 + '/*.jpg'
coll = io.ImageCollection(str,load_func=as_gray)
for i in range(len(coll)):
io.imsave(r'C:/1/tupian'+np.str(i)+'.png',coll[i])

注:
skimage.io(用于图像的输入输出)
skimage.transform(用于图像变换)
skimage.color(用于图像颜色空间转换)
numpy(用于数学运算和数组操作)
运行结果:
在这里插入图片描述
在这里插入图片描述

18.6. 图片的缩放

#1.改变图片的尺寸resize(200,200)
from skimage import transform
import matplotlib.pyplot as plt
img=io.imread('33.png')

plt.subplot(221)
plt.title('resize')
dst =transform.resize(img, (986,772))
plt.imshow(dst,plt.cm.gray)


plt.subplot(222)
plt.title('before resize')
dst =transform.resize(img, (450,350))
plt.imshow(dst,plt.cm.gray)

plt.subplot(223)
plt.title('before resize')
dst =transform.resize(img, (150,120))
plt.imshow(dst,plt.cm.gray)

plt.subplot(224)
plt.title('before resize')
dst =transform.resize(img, (25,60))
plt.imshow(dst,plt.cm.gray)

plt.show()

注:pyplot模块提供了创建和定制图表的函数。
运行结果:
在这里插入图片描述

#2.按比例缩放
from skimage import transform,data,io
import matplotlib.pyplot as plt
img=io.imread('lbxx.jpg')


plt.subplot(2,2,1)
plt.title('1')

plt.imshow(img)


plt.subplot(2,2,2)
plt.title('2')
dst=transform.rescale(img,0.1)
plt.imshow(dst)

plt.subplot(2,2,3)
plt.title('3')
dst=transform.rescale(img,0.5)
plt.imshow(dst)

plt.subplot(2,2,4)
plt.title('4')
dst=transform.resize(img,2)
plt.show(dst)

运行结果:
在这里插入图片描述

18.7. 将图片进行旋转

from skimage import transform
import matplotlib.pyplot as plt
img=io.imread('lbxx.jpg')
print(img.shape)
img1=transform.rotate(img, 60)
print(img1.shape)
img2=transform.rotate(img, 30,resize=True)
print(img2.shape)
plt.figure('1')
plt.subplot(121)
plt.title('60')
plt.imshow(img1,plt.cm.gray)
plt.subplot(122)
plt.title('30')
plt.imshow(img2,plt.cm.gray)
plt.show()

注:skimage.transform.rotate函数将img图像旋转60度。旋转后的图像被存储在变量img1。
运行结果:
在这里插入图片描述

18.8. 对图片的亮度和对比度进行调整

from skimage import io,exposure,img_as_float,data
import matplotlib.pyplot as plt
img=io.imread('lbxx.jpg') 

gam1=exposure.adjust_gamma(img, 2)
gam2=exposure.adjust_gamma(img, 0.5)
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('0.5')
plt.imshow(gam2,plt.cm.gray)
plt.axis('off')

plt.show()

注:exposure模块包含了一系列用于调整图像曝光度的函数,img_as_float函数用于将图像转。换为浮点数表示。
运行结果:
在这里插入图片描述

18.9. 使用对数函数(log)对亮度进行调整

from skimage import io,exposure,img_as_float,data
import matplotlib.pyplot as plt
img=io.imread('ww.jpg') 

log1=exposure.adjust_log(img)
plt.figure('adjust_log',figsize=(8,8)) #log对数函数调整

plt.subplot(121)
plt.title('origin image')
plt.imshow(img,plt.cm.gray)
plt.axis('off')

plt.subplot(122)
plt.title('log')
plt.imshow(log1,plt.cm.gray)
plt.axis('off')

plt.show()
io.imsave('D:\ww1.jpg',img)

注:使用skimage.exposure.adjust_log函数将img图像调整为对数形式。调整后的图像被存储在变量log1中。
运行结果:
在这里插入图片描述

18.10. 判断图像对比度

#判断图像对比度是否偏低
from skimage import io,exposure
img = io.imread("D:\ww1.jpg")
result=exposure.is_low_contrast(img)
print(result)

注:skimage.exposure.is_low_contrast函数来判断img图像的对比度是否偏低。函数返回一个布尔值,如果对比度偏低,则返回True;否则返回False。
运行结果:
在这里插入图片描述

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

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

相关文章

网红大佬的面子,高阶智驾的里子 | 2024北京车展

相关阅读&#xff1a;2023北京车展 《没有争奇斗艳的车模&#xff0c;只有往死里卷的智能汽车》。 文&#xff5c;刘俊宏 李想、李斌绑定“车圈新顶流”雷军互相抬轿子&#xff0c;红衣大叔周鸿祎高情商点评各家汽车新品...... 为了流量&#xff0c;今年车企大佬们比任何时候…

volatile的相关知识点

volatitle这个关键字&#xff0c;不管是在Java还是在C中都有使用到&#xff0c;但是在两种语言中&#xff0c;由于编译器的原因&#xff0c;他们存在一点点区别。 C中的volatile关键字 在C中volatile主要用于告诉编译器&#xff0c;这个变量的值可能会意外改变 ,例如被硬件或者…

力扣刷题 62.不同路径

题干 一个机器人位于一个 m x n 网格的左上角 &#xff08;起始点在下图中标记为 “Start” &#xff09;。 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角&#xff08;在下图中标记为 “Finish” &#xff09;。 问总共有多少条不同的路径&#xff1f; …

HertzBeat:一款开源实时监控告警系统,简直太好用了!

&#x1f604; 19年之后由于某些原因断更了三年&#xff0c;23年重新扬帆起航&#xff0c;推出更多优质博文&#xff0c;希望大家多多支持&#xff5e; &#x1f337; 古之立大事者&#xff0c;不惟有超世之才&#xff0c;亦必有坚忍不拔之志 &#x1f390; 个人CSND主页——Mi…

训练营第三十六天动态规划(基础题part2)

训练营第三十六天动态规划&#xff08;基础题part2&#xff09; 62.不同路径 力扣题目链接 题目 一个机器人位于一个 m x n 网格的左上角 &#xff08;起始点在下图中标记为 “Start” &#xff09;。 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角&am…

企业计算机服务器中了rmallox勒索病毒怎么办,rmallox勒索病毒解密流程

对于众多的企业来说&#xff0c;通过网络开展各项工作业务已经成为常态&#xff0c;网络为企业的生产运营提供了极大便利&#xff0c;也大大加快了企业发展的步伐&#xff0c;但众多企业越来越重视企业发展中的核心数据安全问题。近期&#xff0c;云天数据恢复中心接到众多企业…

Linux的学习之路:21、线程(1)

摘要&#xff1a; 本章说一下线程 目录 摘要&#xff1a; 一、回忆一下 二、如何理解线程 三、命令行看线程 四、利用函数进行使用 五、本章总结 1、线程的优点 2、线程的缺点 3、线程的异常 4、线程的用途 一、回忆一下 1、exe就是一个文件 2、我们的可执行程序…

企业工厂如何逆风翻盘:VR全景打破多重桎梏

现阶段&#xff0c;制造业工厂面临的困境&#xff0c;就是用着上百万的设备&#xff0c;却赚着几毛钱的利润。传统的工厂参观方式也存在着很多的局限性&#xff0c;例如时间上不方便、不能实地参访、生产线具有隐患等&#xff0c;都会使得参观者不能深入地了解工厂的生产环境和…

大模型对数字营销的驱动赋能

一、大模型驱动的营销数智化个信未来发展趋势 1.模型算法能力全面升级 大模型凭借智能化的用户洞察&#xff0c;个性化的需求预测、系统化的数据分析、效率化的营销决策以及实实化的全域检测支持&#xff0c;为营销行业更加准确地把握市场动态和消费者需求提供了强大支持。可以…

ubuntu22.04 修改内核源码教程

1. 确认当前内核版本 uname -a 2. 去ubuntu官网下载对应版本内核源码 6.5.0-28.29 : linux package : Ubuntu (launchpad.net) 3. 准备编译环境 sudo apt-get install libncurses5-dev libssl-dev build-essential openssl flex bison libelf-dev tar -xzvf linux_6.5.…

【VS+QT】visual studio 2022配置和搭建QT

一、下载QT 可以去QT官网下载:https://www.qt.io/product/development-tools。 直接安装。 二、安装qt插件 打开visual studio 2022&#xff0c;选择菜单栏中扩展->管理扩展 ,然后直接在vs插件市场搜索Qt Visual Studio Tools就行。 安装的时候根据提示&#xff0c;关闭…

动态规划|714.买卖股票的最佳时机含手续费

力扣题目链接 class Solution { public:int maxProfit(vector<int>& prices, int fee) {int n prices.size();vector<vector<int>> dp(n, vector<int>(2, 0));dp[0][0] - prices[0]; // 持股票for (int i 1; i < n; i) {dp[i][0] max(dp[i …

java案例-服务端与客户端(传输对象)

需求 代码 SysUser 用户类Operation 操作类Client 客户端Server 服务端ServerReaderThread 服务端线程类 SysUser 用户类 需要实现Serializable 方便序列化&#xff0c;传输对象 public class SysUser implements Serializable {private String username;private String passwo…

Swift - 枚举

文章目录 Swift - 枚举1. 枚举的基本用法2. 关联值&#xff08;Associated Values&#xff09;3. 关联值举例4. 原始值5. 隐式原始值&#xff08;Implicitly Assigned Raw Values&#xff09;6. 递归枚举&#xff08;Recursive Enumeration&#xff09;7. MemoryLayout Swift -…

解锁无限创意—MidjourneyAI绘画系统源码 支持AI智能会话+分销功能 对接ChatGPT+Midjourney接口 集成国内外众多AI大模型

在数字化浪潮汹涌的时代&#xff0c;人工智能已经成为推动社会进步的重要力量。而在艺术创作领域&#xff0c;MidjourneyAI绘画系统正以其强大的源码支持、智能会话功能、以及独特的分销模式&#xff0c;引领着智能艺术的新潮流。 分享一款MidjourneyAI绘画系统的源码&#xf…

leetcode多个测试用例之间相互影响导致提交失败

背景 在做一道easy题&#xff0c;二叉树的中序遍历&#xff0c;我提交的代码如下 from typing import (Optional,List )# Definition for a binary tree node. class TreeNode:def __init__(self, val0, leftNone, rightNone):self.val valself.left leftself.right right…

基础动态规划 - 过河卒

过河卒 兵从A点走到B点的所有路径方案&#xff0c;且不能经过 “马能吃棋子”的格子。 如果没有马&#xff0c;那么这道题就是一个简单的从A点走到B点的所有路径情况的简单动态规划。 状态转移方程为 dp[i,j] dp[i - 1,j] dp[i,j - 1]。 但如果加上了马这个棋子&#xff0…

一份报告实现两电平逆变、三电平逆变、三相整流、光伏并网simulink仿真

一份报告实现两电平逆变、三电平逆变、三相整流、光伏并网simulink仿真。逆变、整流与光伏的全家桶系列&#xff0c;适合小白使用。 模型获取链接&#xff1a;一份报告实现两电平逆变、三电平逆变、三相整流、光伏并网simulink仿真

llama3本地部署

目录 II.下载 II.验证ollama安装 II.安装llama3 和启动 II.命令行调用 II.api调用 II.参考文献 II.下载 https://ollama.com/download/windows OllamaSetup.exe https://github.com/meta-llama/llama3 II.验证ollama安装 cmd ollama II.安装llama3 和启动 ollama run …

LeetCode 2385.感染二叉树需要的总时间:两次搜索(深搜 + 广搜)

【LetMeFly】2385.感染二叉树需要的总时间&#xff1a;两次搜索&#xff08;深搜 广搜&#xff09; 力扣题目链接&#xff1a;https://leetcode.cn/problems/amount-of-time-for-binary-tree-to-be-infected/ 给你一棵二叉树的根节点 root &#xff0c;二叉树中节点的值 互不…
最新文章