当前位置:   article > 正文

【计算机视觉—python 】 图像处理入门教程 —— 图像读取、显示和保存【 openCV 学习笔记 001 to 004】_计算机视觉显示图像

计算机视觉显示图像

1、图像读取和显示

cv2.imread():根据图片路径(不能有中文!)读取图片( 常见格式有 bmp/jpg/png ),返回矩阵,如果读不出来会返回空矩阵([ ])。
retval = cv.imread( filename [, flags] ) # 函数说明
  • 1
  • filename :图片路径参数
  • [, flags] :读取图片的方式 ,有以下几种情况 ( 不是必填参数)
    • 1(cv2.IMREAD_COLOR) :三通道BGG彩图,默认
    • 0(cv2.I.IMREAD_GRAYSCALE) :单通道灰度图像
    • -1(cv2.IMREAD_UNCHANGED) :原样返回(Alpha通道)
    • 2 (cv2.IMREAD_UNCHANGED) :在输入具有相应深度时返回16位/ 32位图像,否则将其转换为8位
    • 4 (cv2.IMREAD_ANYCOLOR):以任何可能的颜色格式读取图像
  • retval :读取的 OpenCV 图像,nparray 多维数组格式
cv2.imshow():将np.array图像数据,窗口中显示,图像(高于8位的映射成[0,255])的缩放取决于图像深度。
None = imshow(winname, img) # 函数说明
  • 1
  • winname:字符串,窗口名称。
  • img:所显示的 OpenCV 图像,nparray 多维数组。
  • None:没有参数!

PS :

  1. cv2.imshow() 之后用 cv2.waitKey(毫秒) 设定图像窗口显示时长, cv2.waitKey(0) 常亮 ,否则不会显示图像窗口(一闪而过)。
  2. 可以创建多个不同的显示窗口,每个窗口必须命名不同的 filename。
  3. cv2.destroyWindow() 函数关闭指定的显示窗口,也可以用 cv2.destroyAllWindows() 函数关闭所有的显示窗口。
  4. 如果要更改图片的分辨率,需要先调用 cv2.namedWindow(“”,WINDOW_NORMAL)。
# cv2.imshow()常规用法
import cv2 # 导入openCV包 (环境配置 cmd -> pip install opencv-python 详情自查) 
imgFile = r"C:\Users\Administrator\Desktop\work_code\learn_openCV\code\test.jpg" # 设置读取文件的英文路径
img1 = cv2.imread(imgFile , flags=1) # 读取彩图(BGR) 这里我原图用的彩图
img2 = cv2.imread(imgFile , flags=0) # 读取灰图
cv2.imshow("3C" , img1)  # 在窗口3C显示图像 img1
cv2.imshow("1C" , img2)  # 在窗口1C显示图像 img2
cv2.waitKey(0)# 等待按键关闭
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

在这里插入图片描述

# 调整图片分辨率
cv2.namedWindow("[400:300]", cv2.WINDOW_NORMAL) # 要更改图像分辨率
cv2.resizeWindow("[400:300]", 400, 300) # 改成400×300的图像
cv2.imshow("[400:300]", img1)  # 在窗口 [400:300]显示图像 img1
cv2.waitKey(0)  # 等待按键关闭
  • 1
  • 2
  • 3
  • 4
  • 5

在这里插入图片描述

# 几个图片 一个窗口显示
import numpy as np # 导入numpy包 (环境配置 cmd -> pip install numpy 详情自查) 
imgL = cv2.imread(imgFile , flags=1) # 左边图
imgR = cv2.imread(imgFile , flags=1) # 右边图
imgStack = np.hstack((imgL, imgR))  # 相同大小和相同通道 图像水平拼接
cv2.imshow("2_pic", imgStack)  # 在一个窗口 2_pic 显示图像2个图像
cv2.waitKey(0)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

在这里插入图片描述

# 使用 imdecode 可以读取带有中文的文件路径和文件名
imgFile = r"C:\Users\Administrator\Desktop\中文路径\中文图片.png" # 设置读取文件的中文路径
img3 = cv2.imdecode(np.fromfile(imgFile, dtype=np.uint8), -1) # 必须是Alpha通道
cv2.imshow("chinese" , img3)
cv2.waitKey(0)
  • 1
  • 2
  • 3
  • 4
  • 5

在这里插入图片描述

# 从网络中读取图像
import urllib.request as request
response = request.urlopen("https://img-blog.csdnimg.cn/a744afef3cf346e1b6deff25c5b8208e.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBAUHl0aG9u5bCP55m96L-b6Zi2,size_12,color_FFFFFF,t_70,g_se,x_16#pic_center")
imgUrl = cv2.imdecode(np.array(bytearray(response.read()),dtype=np.uint8),-1)
cv2.imshow("Net" , imgUrl)
cv2.waitKey(0)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

在这里插入图片描述

plt.imshow():通过 matplotlib 库显示图像,与imread()不同的是,plt是RGB格式(PyQt5),imread()是BGR格式(彩色图像数据都是Numpy多维数组,RGB是颜色分量按红,绿,蓝排序,BGR是蓝,绿,红排序),用参数cmap="gray"可以直接使用imread转换的灰度图。
matplotlib.pyplot.imshow(img[, cmap]) # 函数说明
  • 1
  • img:图像数据,nparray 多维数组,对于 openCV(BGR)格式图像要先进行格式转换
  • cmap:颜色图谱(colormap),默认为 RGB(A) 颜色空间
    • gray:灰度显示
    • hsv:hsv 颜色空间
# plt.imshow() 用法
import cv2
import matplotlib.pyplot as plt # # 导入matplotlib包 (环境配置 cmd -> pip install matplotlib 详情自查) 
imgFile = r"C:\Users\Administrator\Desktop\work_code\learn_openCV\code\test.jpg"  # 读取文件的路径
img1 = cv2.imread(imgFile, flags=1)  # 读取彩色图像(BGR)

imgRGB = cv2.cvtColor(img1, cv2.COLOR_BGR2RGB)  # ****图片格式转换:BGR(OpenCV) -> RGB(PyQt5)****
img2 = cv2.cvtColor(img1, cv2.COLOR_BGR2GRAY)  # ****图片格式转换:BGR(OpenCV) -> Gray****

plt.rcParams['font.sans-serif'] = ['FangSong']  # 支持中文标签
plt.subplot(221), plt.title("1. RGB 格式(mpl)"), plt.axis('off') # 2×2个图片 第一个位置(左上) 不显示坐标轴、坐标轴标签
plt.imshow(imgRGB)  # matplotlib 显示彩色图像(RGB格式)
plt.subplot(222), plt.title("2. BGR 格式(OpenCV)"), plt.axis('off')  # 2×2个图片 第一个位置(右上) 不显示坐标轴、坐标轴标签
plt.imshow(img1)  # matplotlib 显示彩色图像(BGR格式)
plt.subplot(223), plt.title("3. 设置 Gray 参数"), plt.axis('off') # 2×2个图片 第一个位置(左下) 不显示坐标轴、坐标轴标签
plt.imshow(img2, cmap='gray')  # matplotlib 显示灰度图像,设置 Gray 参数
plt.subplot(224), plt.title("4. 未设置 Gray 参数"), plt.axis('off') # 2×2个图片 第一个位置(右下) 不显示坐标轴、坐标轴标签
plt.imshow(img2)  # matplotlib 显示灰度图像,未设置 Gray 参数
plt.show() # 窗口显示
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19

在这里插入图片描述

2、图像保存

cv2.imwrite():将np.array图像数据,转换成图片保存到本地文件。
retval = cv2.imwrite(filename, img [, paras]) # 函数说明
  • 1
  • filename:要保存的文件的路径和名称,包括要**保存的图片扩展名**。
  • img:nparray 多维数组。
  • paras:不同编码格式的参数,可选项
    • 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),数值越大则压缩比越大。
  • retval:返回值,保存成功返回 True,否则返回 False。
# cv2.imwrite() 常规用法
import cv2
imgFile = r"C:\Users\Administrator\Desktop\work_code\learn_openCV\code\test.jpg" # 设置读取文件的英文路径
img = cv2.imread(imgFile,0) # 读取灰度图像
saveFile = r"C:\Users\Administrator\Desktop\work_code\learn_openCV\pic\Grey.png"# 设置保存文件的路径和图片名和扩展名
cv2.imwrite(saveFile, img)# 保存
# paras参数的用法
cv2.imwrite(saveFile, img, [int(cv2.IMWRITE_PNG_COMPRESSION), 8])  # 保存图像文件, 设置压缩比为 8
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
# 中文路径或中文图片名用法
chinese_saveFile =  r"C:\Users\Administrator\Desktop\中文路径\灰度图像.jpg"
# cv2.imwrite(chinese_saveFile, img) 不会报错返回为空 没有反应
img_write = cv2.imencode(".jpg", img)[1].tofile(chinese_saveFile) # 保存中文路径
  • 1
  • 2
  • 3
  • 4

声明:本文是向博主「youcans_」OpenCV例程300篇学习的自用学习笔记 
原文链接:【youcans@qq.com, youcans的OpenCV例程300篇, https://blog.csdn.net/youcans/category_11459626.html】

  • 1
  • 2
  • 3
  • 4
本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号