python【笔记】:opencv库(一) 输入输出图像
来源:互联网 发布:百度联盟和淘宝联盟 编辑:程序博客网 时间:2024/06/05 20:13
- opencv库一 输入输出图像
- 导入模块
- 读取图像
- 图像输出
- 用 opencv 输出
- 用 matplotlib 输出
- 综合例子
opencv库(一): 输入输出图像
1 导入模块
数字图像数据可以用矩阵来表示,因而我们可以采用矩阵理论和矩阵算法对数字图像进行分析和处理。 opencv
库依赖与 numpy
库的矩阵运算,所以两者需要同时加载。 matplotlib
库不是必须加载的,但是很多时候我们需要用到这个强大的图像处理模块。
import cv2import numpy as npimport matplotlib.pyplot as plt
2 读取图像
原始图像:
img = cv2.imread('img1.png')
img 实际上是一个3维矩阵:
print(type(img)) # <class 'numpy.ndarray'>print(img.shape) # (219, 218, 3)print(img.ndim)# 3
彩色图像有 RGB 三个通道,所以我们可以将这个三维矩阵分成三个部分。
3 图像输出
用 opencv
输出
# opencv 设置窗口 图像输出 窗口关闭 cv2.namedWindow('image', cv2.WINDOW_NORMAL)cv2.imshow('image',img)cv2.waitKey(0)cv2.destroyAllWindows() # 等价于cv2.destroyWindow('image')
cv2.namedWindow()
其实可以不需要,但是如果图片尺寸比较大,输出的图像会装不下电脑屏幕。该命令第一个参数是输出的窗口的名称。cv2.imshow()
是图像输出的命令,第一个参数为输出的窗口的名称,第二个参数是读取的图像变量。cv2.waitKey(0)
是等待按键关闭窗口的时间,传递的数值单位为毫秒,设置成 0 的话是无限等待。cv2.destroyAllWindows()
是关闭窗口命令。若需要指定关闭某个窗口,可以使用cv2.destroyWindow('image_name')
。
用 matplotlib
输出
img = cv2.imread('img1.png')b,g,r = cv2.split(img)img2 = cv2.merge([r,g,b])plt.imshow(img2)plt.show()
需要注意的是, opencv
用 cv2.imread()
命令读取到的三原色顺序为blue,green,red ,用 opencv
展示出来的是图像正确的颜色;而一般而言,三原色的顺序为RGB,所以我们如果用 matplotlib
显示图像,需要重组矩阵以正确显示图像的颜色。参见此处:stack overflow
命令实现:
b,g,r = cv2.split(img)img2 = cv2.merge([r,g,b])
我们可以用下面的语句看看拆分的矩阵是什么:
print(b)print('\n')print(b.shape)print('\n')print(np.all(b==img[:,:,0]))
输出结果为:
上面的命令表明:
- 我们可以通过 img
矩阵的切片得到RGB矩阵,比如 img[:,:,0]
得到 blue 通道
- img.shape
或者 b.shape
的第一个数字代表图像的高度,第二个数字代表图像的宽度。
测试以下命令:
img = cv2.imread('img1.png')b,g,r = cv2.split(img)img2 = cv2.merge([r,g,b])plt.subplot(221)plt.title('BRG')plt.imshow(img)plt.xticks([]), plt.yticks([]) # to hide tick values on X and Y axisplt.subplot(222)plt.title('RGB')plt.xticks([]), plt.yticks([]) plt.imshow(img2)plt.subplot(223)plt.imshow(img, interpolation = 'bicubic')plt.title('BRG+interpolation')plt.subplot(224)plt.imshow(img2, interpolation = 'bicubic')plt.title('RGB+interpolation')plt.show()
输出结果:
说明:
第一幅图片以 BRG 显示图像,第二幅以 RGB 正常显示图像;
第三、四幅图片经过插值之后,消除了图像锯齿。
4 综合例子
来自官网的一个例子:
img = cv2.imread('img1.png')cv2.imshow('image',img)k = cv2.waitKey(0) & 0xFF # 32位的电脑该命令为 k = cv2.waitKey(0) if k == 27: # wait for ESC key to exit cv2.destroyAllWindows()elif k == ord('s'): # wait for 's' key to save and exit cv2.imwrite('img_from_cv2.png',img) cv2.destroyAllWindows()
该命令可以实现按 Esc
键关闭窗口,按 s
键保存图片
来源:OpenCV-Python Tutorials » Gui Features in OpenCV » Getting Started with Images
阅读全文
0 0
- python【笔记】:opencv库(一) 输入输出图像
- Python-OpenCV 处理视频(一): 输入输出
- Opencv Python版学习笔记(一)图像直方图
- openCV Python 学习笔记(一)图像的基本操作
- Python-OpenCV 杂项(一):图像绘制
- Python-OpenCV 处理视频(一)(二): 输入输出 视频处理
- OPENCV笔记(一)图像显示
- OpenCV学习笔记(一):图像显示
- openCV-Python笔记一:图像的读取、显示和保存
- openCV-Python笔记一:图像的读取、显示和保存
- Python下opencv使用笔记(一)(图像简单读取、显示与储存)
- python学习笔记(一)运行,输入输出,数据类型
- OpenCV python 学习笔记(一)
- Python-OpenCV 处理图像(一):基本操作
- Python-OpenCV 杂项(一):图像绘制
- Python-OpenCV 处理图像(一):基本操作
- Python-OpenCV 杂项(一):图像绘制
- Python-OpenCV 处理图像(一):基本操作 cv2
- MPAndroidChart项目实战(八)——自定义分段堆积柱状图
- 高德地图初体验
- zooKeeper学习(一)
- 1027. Colors in Mars (20)
- 【altium designer】画原理图
- python【笔记】:opencv库(一) 输入输出图像
- fzu-Wand
- 【dede】织梦建站汇总
- There is a cycle in the hierarchy原因
- java集合框架图
- js中cookie的使用
- 回到顶部按钮
- [BZOJ]2338: [HNOI2011]数矩形 叉积
- R的数据清洗