OpenCV提供了众多对图片操作的函数,其中最基本的就是图片的读取与输出了。

一、读取图片

  利用OpenCV读取一张图片是非常容易的,只需要用到 imread() 函数,打开shell或者cmd,进入python,输入help(cv2.imread)获取该函数的文档,得到:

imread(...)
    imread(filename[, flags]) -> retval

  可见, imread需要提供两个参数,第一个是图片的路径,第二个是图片读取的模式(flags),函数返回一个存储着图片像素数据的矩阵。

  flags有三个值:

  • cv2.IMREAD_COLOR             加载彩色图片,透明度将被舍弃
  • cv2.IMREAD_GRAYSCALE      灰度模式
  • cv2.IMREAD_UNCHANGED     完整的加载一张图片,包括alpha通道值(用来表示透明度)

  这三个flags还可以分别用1,0,-1代替  

img = cv2.imread("test.jpg", cv2.IMREAD_GRAYSCALE)
img = cv2.imread("test.jpg", 0)
# 这两者是等价的

  现在,我们已经获得了图像test.jpg的数据,存储在img中。img实际上是一个numpy的array数组,它包含着每个像素点的数据(如果是彩色模式,则包括了bgr值,灰度模式则是灰度值)。我们可以通过下标访问每一个像素点的数据,对每一个像素点进行更改操作。

二、在窗口中展示图片

  在加载图片之后,我们可以利用 imshow() 函数把加载的图片展示出来,同样的,我们利用help(cv2.imshow)来查看该函数的用法:

imshow(...)
imshow(winname, mat) -> None

  imshow需要两个参数,第一个是窗口的名字(winname),第二个是图片的像素矩阵(mat),函数没有返回值。imshow()会创建一个窗口,并在该窗口中把图片展示出来,我们不用操心图片是彩色的还是灰色,OpenCV会自动推导出图片数据的模式。那我们现在把之前存储在img里的图片展示出来:

cv2.imshow("test", img)
cv2.waitKey(0) # 等待用户按下按键
cv2.destroyAllWindows() # 关闭所有窗口

    展示效果:                            原图:

                        

我们可以看到,原来透明的像素点都变成黑色了,这是因为灰度模式下透明度信息被舍弃,原来透明的像素点的值变为0,也就变成了黑色(255是白色)

三、保存图片

  我们获得了一张灰色的图片,如果想要把它保存下来,应该怎么做呢?这时候就需要利用 imwrite() 函数,python环境下输入help(cv2.imwrite),得到:

imwrite(...)
    imwrite(filename, img[, params]) -> retval

  filename为输出图片的名字,img为要输出的图片,params为图片格式的参数,如果图片写入成功则返回True,否则返回False。

  我们把这张灰度图像保存为gray.jpg:

cv2.imwrite("gray.jpg", img)

最新文章

  1. 程序后端调用post请求。
  2. Java类的成员函数调用顺序
  3. HtmlWeb类
  4. mysql修改表结构
  5. QF——iOS程序运行原理(APP的生命周期)
  6. windows中使用Git工具连接GitHub(配置篇)
  7. Ionic2中集成第三方控件Sweetalert
  8. SmileyFace——基于OpenCV的人脸人眼检测、面部识别程序
  9. 每日一练ACM 2019.04.14
  10. jmeter 启动jmeter-server.bat远程调用报错: java.io.FileNotFoundException: rmi_keystore.jks (系统找不到指定的文件。)
  11. SLES12SP2使用总结
  12. 关于idtcpserver的使用
  13. MySQL Crash Course #07# Chapter 15. 关系数据库. INNER JOIN. VS. nested subquery
  14. 【Java】JavaWeb文件上传和下载
  15. 【CVE-2018-11116】openwrt rpcd 配置文件错误导致访问控制失效
  16. 深度学习与计算机视觉(12)_tensorflow实现基于深度学习的图像补全
  17. 【BZOJ1864】三色二叉树(动态规划)
  18. [转载]ODBC数据源
  19. CAS实战のclient自定义过滤器
  20. HTML5 拖放、交换位置

热门文章

  1. JavaScript 之 HelloWorld编写
  2. TCP常见的定时器三次握手与四次挥手
  3. Extjs4+PHP MVC模式一(入门)
  4. String to Integer (atoi) - 字符串转为整形,atoi 函数(Java )
  5. Hadoop 2.6.5 FileSystem和Configuration两个对象的探究
  6. JSON的详细介绍
  7. 【SpringMVC】使用SpringMVC进行上传文件!
  8. 关于使用JQuery追加Option标签时使用三元运算符添加选中属性的解决办法
  9. (转)Linux命令grep
  10. HTML5 开发APP( 环境配置)