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

news2024/11/15 21:56:51

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.coloradmin.cn/o/1630780.html

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

相关文章

Python多线程编程深度探索:从入门到实战

title: Python多线程编程深度探索&#xff1a;从入门到实战 date: 2024/4/28 18:57:17 updated: 2024/4/28 18:57:17 categories: 后端开发 tags: 多线程并发编程线程安全Python异步IO性能优化实战项目 第1章&#xff1a;Python基础知识与多线程概念 Python简介&#xff1a…

WPF 6 命令

命令 创建一个按钮&#xff0c;新建一个事件&#xff0c;按住F12 就可以添加业务代码 运行代码 此时希望UI与后台代码分离&#xff0c;互不影响 此时新建一个MainViewModel类&#xff0c;来保存业务代码 Icommand 是所有command的父类接口 新建一个command来实现这个接口…

怎么才能让数字在横线上缩小了数字还在横线上

<!DOCTYPE html> <html lang"zh-CN"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>刻度</title> </head> <style typ…

遇到软件测试职业瓶颈,如何突破

作为职场人&#xff0c;遇到发展瓶颈是在所难免的&#xff0c;无论是晋升受限、技能升级缓慢&#xff0c;还是工作激情的丢失&#xff0c;这些挑战都可能让人感到挫败。但是&#xff0c;积极应对&#xff0c;你就可能找到那扇通向新机遇的窗。 1. 自我评估 识别问题 是缺乏技…

武汉星起航:挂牌上海股权中心,开启资本新篇章助力跨境电商飞跃

2023年10月30日&#xff0c;武汉星起航电子商务有限公司在上海股权托管交易中心成功挂牌展示&#xff0c;标志着这家在跨境电商领域拥有卓越声誉的企业正式迈入了资本市场的大门。对于武汉星起航来说&#xff0c;这不仅是其发展历程中的一个重要里程碑&#xff0c;更是对其业务…

<计算机网络自顶向下> Internet Protocol(未完成)

互联网中的网络层 IP数据报格式 ver: 四个比特的版本号&#xff08;IPV4 0100, IPV6 0110&#xff09; headlen&#xff1a;head的长度&#xff08;头部长度字段&#xff08;IHL&#xff09;指定了头部的长度&#xff0c;以32位字&#xff08;4字节&#xff09;为单位计算。这…

mysql 开启远程连接

登录到mysql mysql -uroot -p 打开mysql数据库并查询user表 use mysql; select user, host from user;更改需要远程连接数据库为任何ip 可以连接&#xff0c; 并刷新系统权限相关的表 update user set host% where hostlocalhost and userroot; flush privileges;

算法课程笔记——如何倍增

快速幂 读入量大于1e5不要用cin读入&#xff0c;要用也要关闭同步流 第i个o次方的父亲 #include<bits/stdc.h>usingnamespacestd; #definemaxn 110000#definell long longintn, a[maxn], f[maxn][40]; intquery(intl, intr){intk (int)(log((r - l 1) * 1.0) / log(2.0…

第3篇:创建Nios II工程之Hello_World<二>

Q&#xff1a;上一期介绍完基本设计流程和实验原理&#xff0c;接着我们完成系统硬件设计部分&#xff0c;包括Platform Designer系统及Quartus工程。 A&#xff1a;依次搜索并添加Nios II Processor、JTAG UART、On-Chip Memory和System ID IP组件&#xff0c;连接各组件并As…

扫码分享文件效果怎么做?文件转换成二维码的教程

文件如何快速分享并通过手机查看呢&#xff1f;传统方式一般会通过微信、QQ或者网盘的方式来分享在线内容&#xff0c;但是这种方式需要占用获取内容者的存储空间&#xff0c;所以很多人现在会通过文件转二维码的方式&#xff0c;将二维码分享后通过扫码来获取文件内容。这种方…

Java 基于Graphics2D 实现海报(支持自定义颜色,背景,logo,贴图)

效果&#xff1a; 海报一&#xff1a; 海报二&#xff1a; 代码&#xff1a; 参数实体类&#xff1a; package com.ly.cloud.dto;import lombok.Data;/*** Author * Date Created in 2024/4/24 下午2:16* DESCRIPTION: 海报页面所需的参数 实体类* Version V1.0*/ Dat…

防火墙对要保护的服务器做端口映射的好处是几个

防火墙对要保护的服务器进行端口映射具有多重好处&#xff0c;这些好处主要围绕网络安全性、灵活性和可管理性展开。以下是对这些好处的专业分析&#xff1a; 1. 增强网络安全性&#xff1a;端口映射允许防火墙对进入服务器的流量进行精确控制。通过映射特定端口&#xff0c;防…

volatile的相关知识点

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

Python 基于 OpenCV 视觉图像处理实战 之 OpenCV 简单人脸检测/识别实战案例 之七 简单进行人脸检测并添加面具特效实现

Python 基于 OpenCV 视觉图像处理实战 之 OpenCV 简单人脸检测/识别实战案例 之七 简单进行人脸检测并添加面具特效实现 目录 Python 基于 OpenCV 视觉图像处理实战 之 OpenCV 简单人脸检测/识别实战案例 之七 简单进行人脸检测并添加面具特效实现 一、简单介绍 二、简单进行…

ChatGPT记忆功能终于上线了, OpenAI 官方:用得越久越聪明!

原文 ChatGPT记忆功能终于上线了, OpenAI 官方&#xff1a;用得越久越聪明&#xff01; Aitrainee | 公众号&#xff1a;AI进修生 &#x1f31f; 记得今年2月份OpenAI发布过ChatGPT上线记忆功能的消息&#xff0c;我记得当时还弹出过这个窗口给我&#xff0c;但是仅仅体验了几…

centos7 openresty lua 自适应webp和缩放图片

目录 背景效果图准备安装cwebp等命令&#xff0c;转换文件格式安装ImageMagick&#xff0c;压缩文件下载Lua API 操控ImageMagick的依赖包 代码参考 背景 缩小图片体积&#xff0c;提升加载速度&#xff0c;节省流量。 效果图 参数格式 &#xff1a; ?image_processformat,…

C语言之详细讲解文件操作

什么是文件 与普通文件载体不同&#xff0c;文件是以硬盘为载体存储在计算机上的信息集合&#xff0c;文件可以是文本文档、图片、程序等等。文件通常具有点三个字母的文件扩展名&#xff0c;用于指示文件类型&#xff08;例如&#xff0c;图片文件常常以KPEG格式保存并且文件…

idea创建完项目如何隐藏不重要的文件

如果您不打算直接使用这些脚本&#xff0c;而是更倾向于通过IDEA的内置工具来运行Maven命令&#xff0c;那么您可以选择隐藏这些文件。但是&#xff0c;隐藏这些文件并不会影响它们的功能&#xff0c;只是在项目视图中不再显示它们。 1.转到 File > Settings&#xff08;Wi…

信息系统项目管理师——第7章项目立项管理

本章考选择题2-3分&#xff0c;案例和论文均有可能作为领域考试。 项目建议与立项申请♥♥♥♥♥ 立项申请的概念 立项申请又称为项目建议书&#xff0c;是项目建设单位向上级主管部门提交项目申请时所必须的文 件&#xff0c;是该项目建设筹建单位根据国民经济的发展、国家…

Spark高可用模式和Spark分布式Yarn环境安装

Spark分布式HA环境安装 图-12 高可用模式原理 因为在目前情况下&#xff0c;集群中只有一个Master&#xff0c;如果master挂掉&#xff0c;便无法对外提供新的服务&#xff0c;显然有单点故障问题&#xff0c;解决方法就是master的ha。 有两种方式解决单点故障&#xff0c;一…