OpenCv图像基本操作
1、图片加载,灰度化,显示,保存。
import cv2
# 载入图片
img = cv2.imread("img/dog.jpg")
# 显示图片像素
h, w = img.shape[:2]
print("w:{} h:{}".format(w, h))
# 显示图片
cv2.imshow(winname="dog", mat=img)
# 等待图片的关闭
cv2.waitKey()
输出:
w:1024 h:726
灰度图
import cv2
# 载入图片
img = cv2.imread("img/dog.jpg")
# 生成灰色图片
imgGrey = cv2.imread("img/dog.jpg", 0)
# BGR->GRAY,与上面效果一样
#imGary = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# 显示灰色图片
cv2.imshow(winname="DogGrey", mat=imgGrey)
# 等待图片的关闭
cv2.waitKey()
# 保存灰色图片
cv2.imwrite("Grey.jpg", imgGrey)
显示原图和灰度图
import cv2
import matplotlib.pyplot as plt
# 显示中文字体
plt.rcParams['font.sans-serif'] = ['SimHei']
# 载入图片
img = cv2.imread("img/dog.jpg")
# 分割b,g,r
b, g, r = cv2.split(img)
# 转为rgb显示模式
img_y = cv2.merge([r, g, b])
# 灰度转换
imgary = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# 显示原图
# fig = plt.figure()
# 建立一个一行二列的网格,这是第一列
plt.subplot(1, 2, 1)
# 显示原图
plt.imshow(img_y)
plt.title(u'原图')
# 关闭坐标轴
plt.axis('off')
# 显示灰度化图像
# 建立一个一行二列的网格,这是第二列
plt.subplot(1, 2, 2)
plt.gray()
plt.imshow(imgary)
plt.title(u'灰度图')
plt.axis('off')
plt.show()
2、图像的压缩
import cv2
img = cv2.imread("img/dog.jpg")
img1 = cv2.imread("img/cat1.png")
# jpg格式的,IMWRITE_JPEG_QUALITY其表示的是图像的质量,用0-100的整数表示,默认为95
cv2.imwrite("./dog.jpg", img, [int(cv2.IMWRITE_JPEG_QUALITY), 10])
# png格式的从0到9,压缩级别越高,图像尺寸越小。默认级别为3
cv2.imwrite("./cat1.png", img1, [int(cv2.IMWRITE_PNG_COMPRESSION), 1])
3、窗口的创建与销毁
import cv2
# 载入图片
img = cv2.imread("img/dog.jpg")
# 建立窗口
cv2.namedWindow("img")
# 显示在窗口上
cv2.imshow("img", img)
cv2.waitKey()
# 销毁窗口
cv2.destroyAllWindows()
获取尺寸宽、高、通道数、像素个数、类型
import cv2
# WHC
img = cv2.imread("cat.jpg")
# WH
img_gary = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
print("WHC:{},size:{},type:{}".format(img.shape, img.size, img.dtype))
print("WH:{},size:{},type:{}".format(img_gary.shape, img_gary.size, img_gary.dtype))
# out:WHC:(1021, 700, 3),size:2144100,type:uint8
# out:WH:(1021, 700),size:714700,type:uint8
4、图像三通道的分离与合并
ps:其实在楼上转灰度图的时候已经用到了切割和组合,opencv采用bgr而不是rgb的模式
# import cv2
img = cv2.imread("img/cat.jpg")
# 切割
b, g, r = cv2.split(img)
# rgb显示模式
img_bgr = cv2.merge([b, g, r])
cv2.imshow("b", b)
cv2.imshow("g", g)
cv2.imshow("r", r)
cv2.imshow("rgb", img_bgr)
cv2.waitKey()
cv2.destroyAllWindows()
5、图像缩放
# 图像的缩放
img = cv2.imread("cat.jpg")
print(img.shape[:2])
img_resize = cv2.resize(img, (600, 600))
print(img_resize.shape[:2])
cv2.imshow("img_size", img_resize)
cv2.waitKey()
cv2.destroyAllWindows()