专栏地址:『youcans 的图像处理学习课』
文章目录:『youcans 的图像处理学习课 - 总目录』
【youcans 的图像处理学习课】2. 图像读取与显示
文章目录
1. 图像的读取
函数 cv2.imread() 用于从指定的文件读取图像。
函数说明:
cv.imread(filename[, flags]) -> retval
- 函数 cv2.imread() 从指定文件加载图像并返回该图像的矩阵。
- 如果无法读取图像(文件丢失,权限不正确,格式不支持或无效),该函数返回一个空矩阵。
- 目前支持的文件格式:
- Windows 位图 - * .bmp,* .dib
- JPEG 文件 - * .jpeg,* .jpg,*.jpe
- JPEG 2000文件 - * .jp2
- 便携式网络图形 - * .png
- WebP - * .webp
- 便携式图像格式 - * .pbm,* .pgm,* .ppm * .pxm,* .pnm
- TIFF 文件 - * .tiff,* .tif
参数说明:
- filename:要加载的文件的路径和名称
- flags:读取图片的方式,可选项
- cv2.IMREAD_COLOR(1):始终将图像转换为 3 通道BGR彩色图像,默认方式
- cv2.IMREAD_GRAYSCALE(0):始终将图像转换为单通道灰度图像
- cv2.IMREAD_UNCHANGED(-1):按原样返回加载的图像(使用Alpha通道)
- cv2.IMREAD_ANYDEPTH(2):在输入具有相应深度时返回16位/ 32位图像,否则将其转换为8位
- cv2.IMREAD_ANYCOLOR(4):以任何可能的颜色格式读取图像
- 返回值 retval:OpenCV 图像,nparray 多维数组
注意事项:
- OpenCV 读取图像文件,返回值是一个nparray 多维数组。OpenCV 对图像的任何操作,本质上就是对 Numpy 多维数组的运算。
- OpenCV 中彩色图像使用 BGR 格式,而 PIL、PyQt、matplotlib 等库使用的是 RGB 格式。
- cv2.imread() 如果无法从指定文件读取图像,并不会报错,而是数返回一个空矩阵。
- cv2.imread() 指定图片的存储路径和文件名,在 python3 中不支持中文和空格(但并不会报错)。必须使用中文时,可以使用 cv2.imdecode() 处理,参见扩展例程。
- cv2.imread() 读取图像时默认忽略透明通道,但可以使用 CV_LOAD_IMAGE_UNCHANGED 参数读取透明通道。
- 对于彩色图像,可以使用 flags=0 按照读取为灰度图像。
基本例程:
# 1.1 图像的读取
imgFile = "../images/imgLena.tif" # 读取文件的路径
img1 = cv2.imread(imgFile, flags=1) # flags=1 读取彩色图像(BGR)
img2 = cv2.imread(imgFile, flags=0) # flags=0 读取为灰度图像
扩展例程:
# 1.2 从网络读取图像
import urllib.request as request
response = request.urlopen("https://profile.csdnimg.cn/8/E/F/0\_youcans")
imgUrl = cv2.imdecode(np.array(bytearray(response.read()), dtype=np.uint8), -1)
# 1.3 读取中文路径的图像
imgFile = "../images/测试图01.png" # 带有中文的文件路径和文件名
# imread() 不支持中文路径和文件名,读取失败,但不会报错!
# img = cv2.imread(imgFile, flags=1)
# 使用 imdecode 可以读取带有中文的文件路径和文件名
img = cv2.imdecode(np.fromfile(imgFile, dtype=np.uint8), -1)
2. 图像的保存
函数 cv2.imwrite() 用于将图像保存到指定的文件。
函数说明:
cv2.imwrite(filename, img [, flags])
- cv2.imwrite() 将 OpenCV 图像保存到指定的文件。
- cv2.imwrite() 基于保存文件的扩展名选择保存图像的格式。
- cv2.imwrite() 只能保存 BGR 3通道图像,或 8 位单通道图像、或 PNG/JPEG/TIFF 16位无符号单通道图像。
参数说明:
- filename:要保存的文件的路径和名称
- img:要保存的 OpenCV 图像,nparray 多维数组
- flags:不同编码格式的参数,可选项
- cv2.CV_IMWRITE_JPEG_QUALITY:设置 .jpeg/.jpg 格式的图片质量,取值为 0-100(默认值 95),数值越大则图片质量越高;
- cv2.CV_IMWRITE_WEBP_QUALITY:设置 .webp 格式的图片质量,取值为 0-100;
- cv2.CV_IMWRITE_PNG_COMPRESSION:设置 .png 格式图片的压缩比,取值为 0-9(默认值 3),数值越大则压缩比越大。
注意事项:
- cv2.imwrite() 保存的是 OpenCV 图像(多维数组),不是 cv2.imread() 读取的图像文件,所保存的文件格式是由 filename 的扩展名决定的,与读取的图像文件的格式无关。
- 对 4 通道 BGRA 图像,可以使用 Alpha 通道保存为 PNG 图像。
- cv2.imwrite() 指定图片的存储路径和文件名,在 python3 中不支持中文和空格(但并不会报错)。必须使用中文时,可以使用 cv2.imencode() 处理,参见扩展例程。
基本例程:
# 1.4 图像的保存
imgFile = "../images/logoCV.png" # 读取文件的路径
img3 = cv2.imread(imgFile, flags=1) # flags=1 读取彩色图像(BGR)
saveFile = "../images/imgSave.png" # 保存文件的路径
# cv2.imwrite(saveFile, img3, [int(cv2.IMWRITE\_PNG\_COMPRESSION), 8]) # 保存图像文件, 设置压缩比为 8
cv2.imwrite(saveFile, img3) # 保存图像文件
扩展例程:
# 1.5 保存中文路径的图像
imgFile = "../images/logoCV.png" # 读取文件的路径
img3 = cv2.imread(imgFile, flags=1) # flags=1 读取彩色图像(BGR)
saveFile = "../images/测试图02.jpg" # 带有中文的保存文件路径
# cv2.imwrite(saveFile, img3) # imwrite 不支持中文路径和文件名,读取失败,但不会报错!
img_write = cv2.imencode(".jpg", img3)[1].tofile(saveFile)
3. 图像的显示
函数 cv2.imshow() 用于在窗口中显示图像。
函数说明:
imshow(winname, img) -> None
- 函数 cv2.imshow() 在指定窗口中显示 OpenCV 图像,窗口自适应图像大小。
- 显示图像的缩放取决于图像深度:
- 对 8 位无符号图像,按原样显示;
- 对 16 位无符号或 32 位整数图像,将像素值范围 [0,255 * 256] 映射到 [0,255] 显示;
- 对 32 位浮点图像,将像素值范围 [0,1] 映射到 [0,255] 显示;
- 如果指定窗口尚未创建,则创建一个自适应图像大小的窗口;
- 如果要显示大于屏幕分辨率的图像,需要先调用 namedWindow(“”,WINDOW_NORMAL)。
参数说明:
- winname:字符串,显示窗口的名称。
- img:所显示的 OpenCV 图像,nparray 多维数组
注意事项:
- 函数 cv2.imshow() 之后要用 waitKey() 函数设定图像窗口的显示时长,否则不会显示图像窗口。
- 图像窗口将在 waitKey() 函数所设定的时长(毫秒)后自动关闭,waitKey(0) 表示窗口显示时长为无限。
- 可以创建多个不同的显示窗口,每个窗口必须命名不同的 filename。
- 可以用 destroyWindow() 函数关闭指定的显示窗口,也可以用 destroyAllWindows() 函数关闭所有的显示窗口。
基本例程:
最后
Python崛起并且风靡,因为优点多、应用领域广、被大牛们认可。学习 Python 门槛很低,但它的晋级路线很多,通过它你能进入机器学习、数据挖掘、大数据,CS等更加高级的领域。Python可以做网络应用,可以做科学计算,数据分析,可以做网络爬虫,可以做机器学习、自然语言处理、可以写游戏、可以做桌面应用…Python可以做的很多,你需要学好基础,再选择明确的方向。这里给大家分享一份全套的 Python 学习资料,给那些想学习 Python 的小伙伴们一点帮助!
👉Python所有方向的学习路线👈
Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。
👉Python必备开发工具👈
工欲善其事必先利其器。学习Python常用的开发软件都在这里了,给大家节省了很多时间。
👉Python全套学习视频👈
我们在看视频学习的时候,不能光动眼动脑不动手,比较科学的学习方法是在理解之后运用它们,这时候练手项目就很适合了。
👉实战案例👈
学python就与学数学一样,是不能只看书不做题的,直接看步骤和答案会让人误以为自己全都掌握了,但是碰到生题的时候还是会一筹莫展。
因此在学习python的过程中一定要记得多动手写代码,教程只需要看一两遍即可。
👉大厂面试真题👈
我们学习Python必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!