博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
3、图片处理
阅读量:5294 次
发布时间:2019-06-14

本文共 2358 字,大约阅读时间需要 7 分钟。

1、目标

a、在这里将会学到怎样读取一副图像,怎样显示幅图像,以及如何保存一副图像

b、要学习的函数如下:

cv2.imread(),cv2.imshow(),cv2.imwrite()

c、还可以使用Matplotlib显示一幅图片

2、读入一幅图像

警告:就算图像的路径是错的,OpenCV 也不会提醒你的,但是当你使用命

令print img时得到的结果是None。

3、保存一幅图像

4、总结

下面的程序将会加载一个灰度图,显示图片,按下’s’键保存后退出,或者

按下 ESC 键退出不保存。

5、使用Matplotlib

Matplotib 是 python 的一个绘图库,里头有各种各样的绘图方法。之后

会陆续了解到。现在,你可以学习怎样用 Matplotib 显示图像。你可以放大图
像,保存它等等。

参见:Matplotib 有多种绘图选择。具体可以参见 Matplotib docs。我们也

会陆续了解一些

注意:彩色图像使用 OpenCV 加载时是 BGR 模式。但是 Matplotib 是 RGB

模式。所以彩色图像如果已经被 OpenCV 读取,那它将不会被 Matplotib 正
确显示。具体细节请看练习

附加资源:

Matplotlib Plotting Styles and Features

http://matplotlib.org/api/pyplot_api.html

练习:

1. 当你用 OpenCV 加载一个彩色图像,并用 Matplotib 显示它时会遇
到一些困难。请阅读this discussion并且尝试理解它。

在opencv中彩色图的顺序是BGR,而在matplotlib中彩色图的顺序是RGB,如何相互转换,

import cv2import numpy as np import matplotlib.pyplot as plt img = cv2.imread('messi4.jpg') b,g,r = cv2.split(img) img2 = cv2.merge([r,g,b]) plt.subplot(121);plt.imshow(img) # expects distorted color plt.subplot(122);plt.imshow(img2) # expect true color plt.show() cv2.imshow('bgr image',img) # expects true color cv2.imshow('rgb image',img2) # expects distorted color cv2.waitKey(0) cv2.destroyAllWindows()

NB : Please check @Amro 's comment below for better method of conversion between BGR and RGB. img2 = img[:,:,::-1] . Very simple.

Run this code and see the difference in result yourself. Below is what I got :

补充:

1、用cv2.imshow显示图像,这种方式显示的窗口无法调整,当显示的图像较大时,就无法看到完整的图像,因此选择先创建窗口再显示图像。

 

  1. import cv2 
  2.  
  3. img = cv2.imread('lena.jpg') 
  4.  
  5. win = cv2.namedWindow('test', flags=0) 
  6.  
  7. cv2.imshow('test', img) 
  8.  
  9. cv2.waitKey(0) 

采用窗口名称来访问窗口,而不是窗口句柄之类的东西。

flags为0表示窗口可以用鼠标来改变大小,此时显示的图像也跟着窗口大小变化,需要注意的是它可能会导致图像的变形:

2、matplotlib图像显示

  1. mport cv2  
  2. import matplotlib.pyplot as plt  
  3.   
  4. img = cv2.imread('lena.jpg')  
  5. plt.imshow(img)  
  6. plt.show()  

 颜色有问题,下面将第1通道和第3通道交换后显示:

  1. import numpy as np  
  2. import cv2  
  3. import matplotlib.pyplot as plt  
  4.   
  5. img = cv2.imread('lena.jpg')  
  6. (r, g, b)=cv2.split(img)  
  7. img=cv2.merge([b,g,r])  
  8.   
  9. plt.imshow(img)  
  10. plt.show()  

就正常了

3、用plt读取图像

再比较一下plt.imread和cv2.imread的差别:

  1. import numpy as np  
  2. import cv2  
  3. import matplotlib.pyplot as plt  
  4.   
  5. img1 = cv2.imread('lena.jpg')  
  6. img2 = plt.imread('lena.jpg')  
  7.   
  8. plt.subplot(121)  
  9. plt.imshow(img1)  
  10.   
  11. plt.subplot(122)  
  12. plt.imshow(img2)  
  13.   
  14. plt.show()  

上述代码读取同一张图像并用相同的方法显示,差异还是在颜色通道上:

4、matplotlib显示灰度图

对于只有一个颜色通道的图像,matplotlib可以指定一个map,将单个颜色通道的图像转换为彩色图像。

matplotlib支持下面的map。

 

转载于:https://www.cnblogs.com/gary-guo/p/6278669.html

你可能感兴趣的文章
boost库使用:vs2013下boost::container::vector编译出错解决
查看>>
通过httplib2 探索的学习的最佳方式
查看>>
理解运算符重载 4
查看>>
快来熟练使用 Mac 编程
查看>>
第二周
查看>>
断言简介
查看>>
Node.js 入门:Express + Mongoose 基础使用
查看>>
plsql使用,为什么可以能看见其他用户的表
查看>>
一步步教你轻松学奇异值分解SVD降维算法
查看>>
Scripting Java #3:Groovy与invokedynamic
查看>>
2014-04-21-阿里巴巴暑期实习-后台研发-二面经验
查看>>
数据结构中线性表的基本操作-合并两个线性表-依照元素升序排列
查看>>
使用pager进行分页
查看>>
吐医疗器械研发可配置性需求的槽点
查看>>
UVA - 1592 Database
查看>>
机器翻译评价指标 — BLEU算法
查看>>
机器学习基石(9)--Linear Regression
查看>>
Min Stack
查看>>
从LazyPhp说起
查看>>
Fine Uploader文件上传组件
查看>>