注意:
注意保存积累代码,讲解代码及实现过程。
2020.7.29 周三中午更新
os模块提供了对目录或者文件的新建/删除/查看文件属性,还提供了对文件以及目录的路径操作。比如说:绝对路径,父目录…… 但是,os文件的操作还应该包含移动 复制 打包 压缩 解压等操作,这些os模块都没有提供。
主要内容:os.path.join os.path.exists os.listdir os.mkdir
一开始想要利用pip指令安装这个库,但是总是提示错误
后来度娘之后发现Os是内置库,我大概学的是个假Python…
由于在JupyterNotebook上面得到的路径都些许的奇怪
明明应该给我的结果是这种格式
所以这部分代码我都在PyCharm里面运行了
python os库的使用方法_CSDN
os.path子库以path为入口,用于操作和处理文件路径
函数 | 描述 |
---|---|
os.path.abspath(path) | 返回path在当前系统中的绝对路径os.path.abspath('第四周学习记录.txt') 输出:'E:\20年暑假学习\第四周\PyCharm\第四周学习记录.txt’ 关于这个语句有一些疑问 但其实’第四周学习记录.txt’的路径是E:\Amusement\Python\第四周学习记录.txt, 这个函数 os.path.abspath(path) 返回的路径是我创建的Pycharm程序的路径(因为我是用这个路径下的Pycharm运行的这段代码),但是这个路径下并没有’第四周学习记录.txt’这个文件 |
os.path.normpath(path) | 归一化path的表示形式,统一用\分割路径os.path.normpath(r'E:\Amusement\Python\第四周学习记录.txt') 输出:'E:\Amusement\Python\第四周学习记录.txt’ os.path.normpath('E://Amusement//Python//第四周学习记录.txt') 输出:‘E:\Amusement\Python\第四周学习记录.txt’ |
os.path.relpath(path) | 返回当前程序与文件之间的相对路径(relative path)os.path.relpath(r'E:\Amusement\Python\第四周学习记录.txt') 输出:’…\Amusement\Python\第四周学习记录.txt’ |
os.path.dirname(path) | 返回path中的目录名称os.path.dirname(r'E:\Amusement\Python\第四周学习记录.txt') 输出:‘E:\Amusement\Python’ |
os.path.basename(path) | 返回path中最后的文件名称,如果最后一级也是目录,则返回目录名称os.path.basename(r'E:\Amusement\Python\第四周学习记录.txt') 输出:'第四周学习记录.txt’ os.path.basename(r'E:\Amusement\Python') 输出:‘Python’ |
os.path.split(path) | 返回path中目录和文件名称,如果path最后一集也是目录,则都返回目录名称如果path只有根路径,返回根路径和空路径os.path.split(r'E:\Amusement\Python\第四周学习记录.txt') 输出:’(‘E:\Amusement\Python’, ‘第四周学习记录.txt’)‘ os.path.split(r'E:\Amusement\Python') 输出:’(‘E:\Amusement’, ‘Python’)‘ os.path.split(r'E:') 输出:’(‘E:’, ‘’)’ |
os.path.join(path, *paths) | 组合path和paths,返回一个路径字符串os.path.join(r'E:', r'\Amusement\Python\第四周学习记录.txt') 输出:‘E:\Amusement\Python\第四周学习记录.txt’ |
os.path.exists(path) | 判断path对应文件或目录是否存在,返回True或Falseos.path.exists('第四周学习记录.txt') # 不在此程序的目录下 输出:'False’os.path.exists('Test.txt') # 在此程序的目录下 输出:‘True’ |
os.path.isfile(path) | 判断path所对应是否为已存在的文件,返回True或Falseos.path.isfile(r'E:\Amusement\Python\第四周学习记录.txt') 输出:‘True’ |
os.path.isdir(path) | 判断path所对应是否为已存在的目录,返回True或Falseos.path.isdir(r'E:\Amusement\Python') 输出:‘True’ |
os.path.getmtime(path) | 返回path对应文件或目录最近一次的修改时间os.path.getmtime(r'E:\Amusement\Python\第四周学习记录.txt') 输出:‘1596015422.8338652’ |
os.path.getatime(path) | 返回path对应文件或目录上一次的访问时间os.path.getatime(r'E:\Amusement\Python\第四周学习记录.txt') 输出:‘1596015422.8338652’ |
os.path.getctime(path) | 返回path对应文件或目录创建时间。windows系统中,上一次访问时间等于创建时间os.path.getctime(r'E:\Amusement\Python\第四周学习记录.txt') 输出:‘1596012914.8609786’ |
os.path.getsize(path) | 返回path对应文件的大小,以字节为单位os.path.getsize(r'E:\Amusement\Python\第四周学习记录.txt') 输出:‘96’ |
PyCharm中可执行代码如下
import os
# 返回path在当前系统中的绝对路径
# 但其实'第四周学习记录.txt'的路径是E:\Amusement\Python\第四周学习记录.txt,
# 这个函数返回的路径是我创建的Pycharm程序的路径
# (因为我是用这个路径下的Pycharm运行的这段代码),
# 但是这个路径下并没有'第四周学习记录.txt'这个文件
print(os.path.abspath('第四周学习任务.docx'))
print(os.path.abspath('第四周学习记录.txt'))
# 归一化path的表示形式,统一用\分割路径
print(os.path.normpath(r'E:\530实验室\政源学长\20年暑假学习\第四周\PyCharm\第四周学习任务.docx'))
print(os.path.normpath('E://530实验室//政源学长//20年暑假学习//第四周//PyCharm//第四周学习任务.docx'))
print(os.path.normpath(r'E:\Amusement\Python\第四周学习记录.txt'))
print(os.path.normpath('E://Amusement//Python//第四周学习记录.txt'))
# 返回当前程序与文件之间的相对路径(relative path)
print(os.path.relpath(r'E:\Amusement\Python\第四周学习记录.txt'))
# 返回path中的目录名称
print(os.path.dirname(r'E:\Amusement\Python\第四周学习记录.txt'))
# 返回path中最后的文件名称,如果最后一级也是目录,则返回目录名称
print(os.path.basename(r'E:\Amusement\Python\第四周学习记录.txt'))
print(os.path.basename(r'E:\Amusement\Python'))
# 返回path中目录和文件名称,如果path最后一集也是目录,
# 则都返回目录名称如果path只有根路径,返回根路径和空路径
print(os.path.split(r'E:\Amusement\Python\第四周学习记录.txt'))
print(os.path.split(r'E:\Amusement\Python'))
print(os.path.split(r'E:'))
# 组合path和paths,返回一个路径字符串
print(os.path.join(r'E:', r'\Amusement\Python\第四周学习记录.txt'))
# 判断path对应文件或目录是否存在,返回True或False
print(os.path.exists('第四周学习记录.txt')) # 不在此程序的目录下
print(os.path.exists('Test.txt')) # 在此程序的目录下
# 判断path所对应是否为已存在的文件,返回True或False
print(os.path.isfile(r'E:\Amusement\Python\第四周学习记录.txt'))
print(os.path.isfile(r'E:\Amusement\Python')) # 这里的路径是文件夹的路径,函数的结构为False
# 判断path所对应是否为已存在的目录,返回True或False
print(os.path.isdir(r'E:\Amusement\Python'))
# 返回path对应文件或目录最近一次的修改时间
print(os.path.getmtime(r'E:\Amusement\Python\第四周学习记录.txt')) # 1596015422.8338652
# 返回path对应文件或目录上一次的访问时间
print(os.path.getatime(r'E:\Amusement\Python\第四周学习记录.txt')) # 1596015422.8338652
# 返回path对应文件或目录创建时间。windows系统中,上一次访问时间等于创建时间
print(os.path.getctime(r'E:\Amusement\Python\第四周学习记录.txt')) # 1596012914.8609786
# 返回path对应文件的大小,以字节为单位
print(os.path.getsize(r'E:\Amusement\Python\第四周学习记录.txt')) # 96
os.system(command)
如下例,调用计算器返回值为0
import os
os.system(r'C:\Windows\system32\calc.exe') # 打开计算器 返回值为0
调用网易云音乐,成功打开但是出现了很多错误提示
import os
os.system(r'D:\ProgramFiles\CloudMusic\cloudmusic.exe')
import os
os.system(r'D:\ProgramFiles\ARCTIME_PRO_2.4_WIN64\Arctime Pro.exe')
Python OS 文件/目录方法_菜鸟教程
概述
os.mkdir() 方法用于以数字权限模式创建目录。默认的模式为 0777 (八进制)。
数字权限管理(Digital Rights Management)是保护多媒体内容免受未经授权的播放和复制的一种方法。
语法
os.mkdir(path[, mode])
参数
返回值
没有返回值
实例
import os, sys
path = "E:\Amusement\TestMkdir"
os.mkdir(path, 0o755);
概述
返回指定的文件夹包含的文件或文件夹的名字的列表
语法
os.listdir(path)
参数
返回值
返回指定路径下的文件和文件夹列表
实例
# 返回path目录下所有文件 以列表形式输出
import os
print(os.listdir(r'E:\Amusement'))
# 一个为一行输出
import os
# 打开文件
path = "E:\Amusement"
dirs = os.listdir(path)
# 输出所有的文件和文件夹
for file in dirs:
print(file)
76_shutil模块_Python语法基础和常用模块使用_千锋教程_B站
python之模块之shutil模块_cnblogs
shutil-- --High-level file operations 高级的文件操作模块。
os模块提供了对目录或者文件的新建/删除/查看文件属性,还提供了对文件以及目录的路径操作。比如说:绝对路径,父目录…… 但是,os文件的操作还应该包含移动 复制 打包 压缩 解压等操作,这些os模块都没有提供。
shutil则就是对os中文件操作的补充。–移动 复制 打包 压缩 解压,
拷贝文件
import shutil
# shutil.copyfile('./Test.txt', './dstInPC')
# shutil.copyfile('./Test.txt', '../dstInProj')
# shutil.copyfile('./Os库学习.py', './Os库学习Copy')
shutil.copyfile('../第四周学习任务.docx', './FileCopy任务')
import shutil
shutil.copyfile('../JupyterNotebook/Os库学习.ipynb', './JN_Os库学习.ipynb')
import shutil
shutil.copyfile(r'E:\Amusement\count.txt', r'E:\Competition\countCopy.txt')
复制文件的内容以及文件的所有状态信息,如权限等
import shutil
shutil.copy2(r'D:\3D66\使用说明.txt', 'E:\使用说明.txt')
递归的拷贝文件
import shutil
shutil.copytree(r'E:\电子书', r'E:\报名表\Copy')
拷贝文件夹中的每一个文件
忽略掉.png格式的照片,代码如下
shutil.copytree(r'F:\照片\壁纸',
r'E:\530实验室\照片',
ignore=shutil.ignore_patterns('*.png'))
删除
shutil.rmtree(r'E:\530实验室\dir1') # 结尾要是一个明确的文件名
剪切
shutil.move(r'E:\530实验室\dir1', r'E:\530实验室\dircopy') # 删除源文件,生成新文件
压缩
shutil.make_archive('压缩包', # 压缩后文件名
'gztar', # 指定的压缩格式
r'E:\530实验室\dircopy') # 被压缩的文件夹名字
支持的压缩格式
print(shutil.get_archive_formats()) # 返回支持的压缩包格式
解压
# 解压的文件名 解压到哪个路径下 压缩的格式
shutil.unpack_archive('./压缩包.tar.gz', r'E:\530实验室\Packege', 'gztar')
判断指定目录dir1(自己指定,非py文件的当前目录)是否存在,若不存在创建该目录,将已存在的另一目录dir2 中的若干张图片复制到dir1中,并将文件名写入一excel中,并保存
import shutil, os, openpyxl
# 判定指定目录dir1是否存在
print(os.path.exists(r'E:\Amusement\dir1_1'))
print(os.path.exists(r'E:\Amusement\dir1_2'))
# 第一种方法
# if not os.path.isdir(r'E:\Amusement\dir1_2'):
# os.mkdir(r'E:\Amusement\dir1_2', 0o775)
os.mkdir(r'E:\Amusement\dir1_1', 0o775) # 若不存在,用os.mkdir()创建
# 将dir2中的文件复制到dir1中,一个一个复制
shutil.copy2(r'E:\530实验室\政源学长\Python\dir2\宫崎骏.jpg', r'E:\Amusement\dir1_1\宫崎骏copy.jpg')
shutil.copy2(r'E:\530实验室\政源学长\Python\dir2\han3.png', r'E:\Amusement\dir1_1\han3copy.png')
# ...所有照片同理
# 第二种方法
# dir1_2不存在,创建dir1_2,将dir2中的内容复制到dir1_2
shutil.copytree(r'E:\530实验室\政源学长\Python\dir2', r'E:\Amusement\dir1_2')
# dir1中只保存.jpg格式的照片
shutil.copytree(r'F:\照片\壁纸',
r'E:\530实验室\dir1',
ignore=shutil.ignore_patterns('*.png'))
wb = openpyxl.Workbook() # 创建工作簿
ws = wb.create_sheet('PictureNames') # 创建表单
dirs = os.listdir(r'E:\Amusement\dir1_2') # 将dir1_2中的文件名以list保存至
ws.append(dirs) # 将dirs列表中的内容输入ws表单
wb.save('PictureNames.xlsx')
创建的Excel表格
dir2源文件
dir1_1文件
dir1_2文件
dir1文件,无.png格式的照片
2020.7.29 星期三 下午更新
Win+R输入cmd进入到CMD窗口下,执行python -m pip install -U pip setuptools进行升级
注意安装环境噢,由于我的项目环境名为tensorflow37,所以我需要先激活这个环境再进行安装才能将matplotlib成功安装到我当前所需要的环境中,直接在默认环境中安装不会直接将matplotlib直接导入tensorflow37这个我在用的环境
matplotlib的示例画廊
# 导入pyplot模块(包含很多用于生成图表的函数),指定别名plt,以免反复输入pyplot
import matplotlib.pyplot as plt
squares = [1, 4, 9, 16, 25] # 创建列表
plt.plot(squares) # plot()函数尝试根据这些数字绘制有意义的图形
plt.show() # plt.show()打开matplotlib查看器,显示绘制的图形
# 导入pyplot模块(包含很多用于生成图表的函数),指定别名plt,以免反复输入pyplot
import matplotlib.pyplot as plt
squares = [1, 4, 9, 16, 25]
plt.plot(squares, linewidth=5) # linewidth决定线条粗细
# 设置图表标题,并给坐标加上标签
plt.title("Square Numbers", fontsize=24) # 指定标题
plt.xlabel("Value", fontsize=14) # 横轴指定标题
plt.ylabel("Square of Value", fontsize=14) # 纵轴指定标题
# 设置刻度标记的大小
plt.tick_params(axis='both', labelsize=14) # 设置刻度的样式
plt.show()
仔细观察我们可以发现上面的图形有错误!4^2=25!这是由于列表默认下标从0开始,而我们的列表数[1, 4, 9, …]是从1开始的数字的平方。
修复问题
当你向plot()提供一系列数字时,它假设第一个数据点对应的x坐标值为0,但我们的第一个点对应的x值为1。所以为了改变这种默认行为,我们可以给plot()同时提供输入值和输出值。
# 导入pyplot模块(包含很多用于生成图表的函数),指定别名plt,以免反复输入pyplot
import matplotlib.pyplot as plt
input_values = [1, 2, 3, 4, 5] # 提供输入
squares = [1, 4, 9, 16, 25]
plt.plot(input_values, squares, linewidth=5)
# 设置图表标题,给坐标加上标签
--snip--
3.3.1绘制单个点
import matplotlib.pyplot as plt
plt.scatter(2, 4) # 绘制单个点,向scatter()传递x,y轴
plt.show()
3.3.2设置输出样式:添加标题,给轴加上标签,确保所有文本都大到能够看清
import matplotlib.pyplot as plt
plt.scatter(2, 4, s=200) # 设置点的大小
plt.title("Square Numbers", fontsize=24)
plt.xlabel("Value", fontsize=14)
plt.ylabel("Square of Value", fontsize=14)
plt.tick_params(axis='both', labelsize=14)
plt.show()
向scatter()传递两个分别包含x值和y值的列表
import matplotlib.pyplot as plt
x_values = [1, 2, 3, 4, 5]
y_values = [1, 4, 9, 16, 25]
plt.scatter(x_values, y_values, s=100)
# 设置图表标题,并给坐标加上标签
--snip--
利用scatter()绘制1000个点
import matplotlib.pyplot as plt
x_values = list(range(1, 10001))
y_values = [x**2 for x in x_values] # 推导式
plt.scatter(x_values, y_values, s=40)
# 设置图表标题,并给坐标加上标签
--snip--
# 设置每个坐标轴的取值范围
plt.axis([0, 1100, 0, 110000])
plt.show()
各个点的颜色默认为蓝色点和黑色轮廓(但是我之前的图像没看到黑色轮廓啊!!),删除数据点的轮廓,可在调用scatter()函数时传递实参edgecolor=‘none’
plt.scatter(x_values, y_values, edgecolor='none', s=40)
# 使用matplotlib从dir2中读入每张图片,并用show函数可视化出来
import matplotlib.image as implt
import matplotlib.pyplot as plt
x = implt.imread(r'E:\Amusement\dir1_2\农田.jpg')
plt.imshow(x)
plt.waitforbuttonpress(0)
import cv2
import numpy as np
# 读取
img = cv2.imread(r'E:\Pictures\dir2\han2.png') # 读取照片
# kernel:矩阵,定义大小和值
kernel = np.ones((5, 5), np.uint8) # 用numpy创建kernel:values=1
# 大小 类型:unsigned integer of 8-bit。values range from 0-255
imgGray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# (7, 7): kernal size(卷积):odd number
imgBlur = cv2.GaussianBlur(imgGray, (7, 7), 0)
imgCanny = cv2.Canny(img, 150, 200) # 值越大边缘越模糊
imgDialation = cv2.dilate(imgCanny, kernel, iterations=1)
imgEroded = cv2.erode(imgDialation, kernel, iterations=1) # 变细
# 显示
cv2.imshow("Image", img) # 彩图
cv2.imshow("Gray Image", imgGray) # 灰度图
cv2.imshow("Blur Image", imgBlur) # 模糊版
cv2.imshow("Canny Image", imgCanny) # 边缘
cv2.imshow("Dialation Image", imgDialation) # 边缘膨胀扩大
cv2.imshow("Eroded Image", imgEroded) # 边缘变细
# 保存
cv2.imwrite(r'E:\Competition\saveImg.jpg', img) # 保存为jpg类型的
cv2.imwrite(r'E:\Competition\saveImg.png', img)
cv2.imwrite(r'E:\Competition\GrayImg.png', imgGray)
cv2.imwrite(r'E:\Competition\BlurImg.png', imgBlur)
cv2.imwrite(r'E:\Competition\CannyImg.png', imgCanny)
cv2.imwrite(r'E:\Competition\DialationImg.png', imgDialation)
cv2.imwrite(r'E:\Competition\ErodedImg.png', imgEroded)
cv2.waitKey(0)
2020最新-3h精通Opencv
pip install opencv-python
import cv2
img = cv2.imread(r'E:\Pictures\dir2\han2.png') # 读取照片到img
cv2.imshow('Output', img) # 显示照片 ("名字", 要显示的照片)
cv2.waitKey(0) # 0=infinite delay;如果是1则是1milliseconds
import cv2
cap = cv2.VideoCapture(r'E:\Pictures\蝙蝠侠.mp4') # 选取视频路径
# we need a while loop to go through each frame one by one
while True: # 使用循环读取
success, img = cap.read() # 将cap的图片一个一个赋值给img
cv2.imshow("Video", img) # img显示出来
if cv2.waitKey(1) & 0xFF == ord('q'): # 当按下q结束循环
break
import cv2
cap = cv2.VideoCapture(0) # 写摄像头的ID, 默认为0
cap.set(3, 640) # 长(ID=3)=640
cap.set(4, 480) # 宽(ID=4)=480
cap.set(10, 100) # 改变亮度(ID=10)
# we need a while loop to go through each frame one by one
while True: # 使用循环读取
success, img = cap.read() # 将cap的图片一个一个赋值给img
cv2.imshow("Video", img) # img显示出来
if cv2.waitKey(1) & 0xFF == ord('q'): # 当按下q结束循环
break
import cv2
img = cv2.imread(r'E:\Pictures\dir2\han2.png') # 读取照片
# 在opencv中照片是BGR
# cvtColor=converts(转化) image into different color spaces
# BGR to GRAY
imgGray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
cv2.imshow("Gray Image", imgGray)
cv2.waitKey(0)
import cv2
img = cv2.imread(r'E:\Pictures\dir2\han2.png') # 读取照片
imgGray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# (7, 7): kernal size(卷积):odd number
imgBlur = cv2.GaussianBlur(imgGray, (7, 7), 0)
cv2.imshow("Gray Image", imgGray) # 原版:进行对比
cv2.imshow("Blur Image", imgBlur) # 模糊版
cv2.waitKey(0)
import cv2
img = cv2.imread(r'E:\Pictures\dir2\han2.png') # 读取照片
imgGray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
imgBlur = cv2.GaussianBlur(imgGray, (7, 7), 0)
imgCanny = cv2.Canny(img, 150, 200) # 值越大边缘越模糊
cv2.imshow("Gray Image", imgGray) # 原版:进行对比
cv2.imshow("Blur Image", imgBlur) # 模糊版
cv2.imshow("Canny Image", imgCanny) # 识别边缘
cv2.waitKey(0)
imgCanny = cv2.Canny(img, 100, 100)
imgCanny = cv2.Canny(img, 150, 200) # 值越大边缘越模糊
numpy:a library that helps us deal with matrices
install first:
import cv2
import numpy as np
img = cv2.imread(r'E:\Pictures\dir2\han2.png') # 读取照片
# kernel:矩阵,定义大小和值
kernel = np.ones((5, 5), np.uint8) # 用numpy创建kernel:values=1
# 大小 类型:unsigned integer of 8-bit。values range from 0-255
imgGray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
imgBlur = cv2.GaussianBlur(imgGray, (7, 7), 0)
imgCanny = cv2.Canny(img, 150, 200)
# iterations叠代次数
# 在显示边缘的基础上扩大边缘
imgDialation = cv2.dilate(imgCanny, kernel, iterations=1)
cv2.imshow("Gray Image", imgGray) # 原版:进行对比
cv2.imshow("Blur Image", imgBlur) # 模糊版
cv2.imshow("Canny Image", imgCanny) # 边缘
cv2.imshow("Dialation Image", imgDialation) # 边缘膨胀扩大
cv2.waitKey(0)
imgDialation = cv2.dilate(imgCanny, kernel, iterations=1) # 叠代次数为1
imgDialation = cv2.dilate(imgCanny, kernel, iterations=5) # 叠代次数为5
import cv2
import numpy as np
img = cv2.imread(r'E:\Pictures\dir2\han2.png') # 读取照片
# kernel:矩阵,定义大小和值
kernel = np.ones((5, 5), np.uint8) # 用numpy创建kernel:values=1
# 大小 类型:unsigned integer of 8-bit。values range from 0-255
imgGray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
imgBlur = cv2.GaussianBlur(imgGray, (7, 7), 0)
imgCanny = cv2.Canny(img, 150, 200)
imgDialation = cv2.dilate(imgCanny, kernel, iterations=1)
imgEroded = cv2.erode(imgDialation, kernel, iterations=1) # 变细
cv2.imshow("Gray Image", imgGray) # 原版:进行对比
cv2.imshow("Blur Image", imgBlur) # 模糊版
cv2.imshow("Canny Image", imgCanny) # 边缘
cv2.imshow("Dialation Image", imgDialation) # 边缘膨胀扩大
cv2.imshow("Eroded Image", imgEroded) # 边缘变细
cv2.waitKey(0)
import cv2
import numpy as np
img = cv2.imread('./粉色.jpg')
cv2.imshow('Image', img)
cv2.waitKey(0)
import cv2
import numpy as np
img = cv2.imread(r'E:\Pictures\dir2\han2.png')
# ↓返回shape来得知图片的大小:(900, 1600, 3)=(高,宽,ChannelNumber=3(BGR))
print(img.shape)
# ↓长 ↓高/宽
imgResize = cv2.resize(img, (500, 300)) # 改变大小
print(imgResize.shape)
cv2.imshow('Image', img)
cv2.imshow('Image Resize', imgResize)
cv2.waitKey(0)
import cv2
import numpy as np
img = cv2.imread(r'E:\Pictures\dir2\han2.png')
print(img.shape)
# ↓长 ↓高/宽
imgResize = cv2.resize(img, (500, 300)) # 改变大小
print(imgResize.shape)
# ↓高/宽 ↓长
imgCropped = img[0:200, 200:500] # 裁剪
cv2.imshow('Image', img)
# cv2.imshow('Image Resize', imgResize)
cv2.imshow('Image Cropped', imgCropped)
cv2.waitKey(0)
import cv2
import numpy as np
# 512*512pixels/boxes+,3=0-255
img = np.zeros((512, 512, 3), np.uint8)
# print(img)
# img[200:300, 100:300] = 255, 0, 0 # 蓝色
cv2.line(img, (0, 0), (img.shape[1], img.shape[0]), (0, 255, 0), 3)
cv2.rectangle(img, (0, 0), (250, 350), (0, 0, 255), 2) # 最后的2改成cv2.FILLED填充
cv2.circle(img, (400, 50), 30, (255, 255, 0), 5)
# ↓照片 ↓内容 ↓起始位置 ↓字体 ↓scale ↓颜色 ↓粗细
cv2.putText(img, "Esther", (300, 100), cv2.FONT_HERSHEY_COMPLEX, 1, (0, 150, 0), 1)
cv2.imshow("Image", img)
cv2.waitKey(0)
2020.8.3 周日 下午
这周的学习内容就到这里了,因为还有别的任务,所以没有学完的库将在后续各自的专属博客中进行跟进和更新
溜了溜了…去忙别的了,5号之后继续学!!!在下一个博客见咯
kernel
# kernel:矩阵,定义大小和值
kernel = np.ones((5, 5), np.uint8) # 用numpy创建kernel:values=1 !!
# 大小 类型:unsigned integer of 8-bit。values range from 0-255
差操作和另一个对应的操作
# 差操作,先Dialation再Eroded! 光滑/光滑变粗
函数意义
imgGray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# (7, 7): kernal size(卷积):odd number 和机器学习里面的卷积不太一样
imgBlur = cv2.GaussianBlur(imgGray, (7, 7), 0)
imgCanny = cv2.Canny(img, 150, 200) # 值越大边缘越模糊
imgDialation = cv2.dilate(imgCanny, kernel, iterations=1) # 了解参数!!
imgEroded = cv2.erode(imgDialation, kernel, iterations=1) # 变细
把这个代码吃透
import cv2
import numpy as np
# 读取
img = cv2.imread(r'E:\Pictures\dir2\han2.png') # 读取照片
# kernel:矩阵,定义大小和值
kernel = np.ones((5, 5), np.uint8) # 用numpy创建kernel:values=1 !!
# 大小 类型:unsigned integer of 8-bit。values range from 0-255
imgGray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# (7, 7): kernal size(卷积):odd number
imgBlur = cv2.GaussianBlur(imgGray, (7, 7), 0)
imgCanny = cv2.Canny(img, 150, 200) # 值越大边缘越模糊
imgDialation = cv2.dilate(imgCanny, kernel, iterations=1) # 了解参数!!
imgEroded = cv2.erode(imgDialation, kernel, iterations=1) # 变细
# 差操作,先Dialation再Eroded! 光滑/光滑变粗
# 显示
cv2.imshow("Image", img) # 彩图
cv2.imshow("Gray Image", imgGray) # 灰度图
cv2.imshow("Blur Image", imgBlur) # 模糊版
cv2.imshow("Canny Image", imgCanny) # 边缘
cv2.imshow("Dialation Image", imgDialation) # 边缘膨胀扩大
cv2.imshow("Eroded Image", imgEroded) # 边缘变细
# 保存
cv2.imwrite(r'E:\Competition\saveImg.jpg', img) # 保存为jpg类型的
cv2.imwrite(r'E:\Competition\saveImg.png', img)
cv2.imwrite(r'E:\Competition\GrayImg.png', imgGray)
cv2.imwrite(r'E:\Competition\BlurImg.png', imgBlur)
cv2.imwrite(r'E:\Competition\CannyImg.png', imgCanny)
cv2.imwrite(r'E:\Competition\DialationImg.png', imgDialation)
cv2.imwrite(r'E:\Competition\ErodedImg.png', imgEroded)
cv2.waitKey(0)