01. 图像的读取(cv2.imread)
02. 图像的保存(cv2.imwrite)
03. 图像的显示(cv2.imshow)
04. 用 matplotlib 显示图像(plt.imshow)
import cv2
import numpy as np
import matplotlib.pyplot as plt
# 使用opencv来显示图像, OpenCV 中彩色图像使用 BGR 格式
img = cv2.imread('test.jpg', flags=1) # 返回的是nparray 多维数组,1:彩色 0:灰度图
cv2.namedWindow('本地小狗', cv2.WINDOW_NORMAL) #定义显示窗口,并设置大小
cv2.resizeWindow('本地小狗',680,500)
cv2.imshow('本地小狗',img)
cv2.waitKey()
# 从网络读取图像
import urllib.request as request
url = 'https://gimg2.baidu.com/image_search/src=http%3A%2F%2Fimg1.juimg.com%2F180706%2F330685-1PF60J44225.jpg&refer=http%3A%2F%2Fimg1.juimg.com&app=2002&size=f9999,10000&q=a80&n=0&g=0n&fmt=auto?sec=1662620230&t=42355f86141f5c6ff64f0e487b585d56'
resp = request.urlopen(url)
img_url = np.asarray(bytearray(resp.read()), dtype="uint8")
img_url = cv2.imdecode(img_url, cv2.IMREAD_COLOR) # imdecode 从指定的内存缓存中读取数据,并把数据转换(解码)成图像格式;主要用于从网络传输数据中恢复出图像。
cv2.imshow('net_dog', img_url)
cv2.waitKey()
# 把网络小狗保存到本地
cv2.imwrite('netdog.jpg', img_url) # 不能带中文路径
cv2.imencode(".jpg", img_url)[1].tofile('中文路径小狗.jpg') # 可以带中文路径
# 读取带有中文路径的图像
path = '中文.jpg'
img_1 = np.fromfile(path,dtype = 'uint8')
img_1 = cv2.imdecode(img_1,cv2.IMREAD_COLOR)
cv2.imshow('local_dog',img_1)
cv2.waitKey()
cv2.destroyAllWindows()
# 多个图像组合显示
# img_stack = np.hstack((img,img_url,img_1)) # 相同大小图像水平拼接
# cv2.imshow('three dog',img_stack)
# 使用matplotlib显示opencv图像时要把BGR格式转换为RGB格式
img = cv2.imread('test.jpg', 1)
img_rgb = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
img_gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
plt.subplot(2, 2, 1) # 2行2列,该图位于第1个,也可以不加逗号
plt.title('1.RGB')
plt.axis('off') # 关闭坐标轴
plt.imshow(img_rgb)
plt.subplot(2, 2, 2) # 2行2列,该图位于第2个,也可以不加逗号
plt.title('2.BGR')
plt.axis('off') # 关闭坐标轴
plt.imshow(img)
plt.subplot(2, 2, 3) # 2行2列,该图位于第3个,也可以不加逗号
plt.title('3.gray')
plt.axis('off') # 关闭坐标轴
plt.imshow(img_gray, cmap='gray') # 设置gray参数
plt.subplot(2, 2, 4) # 2行2列,该图位于第4个,也可以不加逗号
plt.title('4.gray_no_cmap')
plt.axis('off') # 关闭坐标轴
plt.imshow(img_gray) # 不设置gray参数
plt.show()
图 1 中 OpenCV 的 BGR 彩色图像已转换为 RGB 格式,彩色图像的颜色显示正常;
图 2 中 OpenCV 的 BGR 彩色图像格式未做转换,彩色图像的颜色显示异常;
图 3 中 plt.imshow() 设置 cmap=‘gray’,灰度图像的颜色显示正常;
图 4 中 plt.imshow() 未设置 cmap=‘gray’,灰度图像的颜色显示异常。