OpenCV Python教程(1、图像的载入、显示和保存)

本文是OpenCV  2 Computer Vision Application Programming Cookbook读书笔记的第一篇。在笔记中将以Python语言改写每章的代码。

PythonOpenCV的配置这里就不介绍了。

注意,现在OpenCV for Python就是通过NumPy进行绑定的。所以在使用时必须掌握一些NumPy的相关知识!

图像就是一个矩阵,在OpenCV for Python中,图像就是NumPy中的数组!

如果读取图像首先要导入OpenCV包,方法为:

[python] view plaincopy
  1. import cv2  

读取并显示图像

在Python中不需要声明变量,所以也就不需要C++中的cv::Mat xxxxx了。只需这样:

[python] view plaincopy
  1. img = cv2.imread("D:\cat.jpg")  

OpenCV目前支持读取bmp、jpg、png、tiff等常用格式。更详细的请参考OpenCV的参考文档。

接着创建一个窗口

[python] view plaincopy
  1. cv2.namedWindow("Image")  

然后在窗口中显示图像

[python] view plaincopy
  1. cv2.imshow("Image", img)  

最后还要添上一句:

[python] view plaincopy
  1. cv2.waitKey (0)  

如果不添最后一句,在IDLE中执行窗口直接无响应。在命令行中执行的话,则是一闪而过。

完整的程序为:

[python] view plaincopy
  1. import cv2   
  2.   
  3. img = cv2.imread("D:\\cat.jpg")   
  4. cv2.namedWindow("Image")   
  5. cv2.imshow("Image", img)   
  6. cv2.waitKey (0)  
  7. cv2.destroyAllWindows()  
最后释放窗口是个好习惯!

创建/复制图像


新的OpenCV的接口中没有CreateImage接口。即没有cv2.CreateImage这样的函数。如果要创建图像,需要使用numpy的函数(现在使用OpenCV-Python绑定,numpy是必装的)。如下:

[python] view plaincopy
  1. emptyImage = np.zeros(img.shape, np.uint8)  
在新的OpenCV-Python绑定中,图像使用NumPy数组的属性来表示图像的尺寸和通道信息。如果输出img.shape,将得到(500, 375, 3),这里是以OpenCV自带的cat.jpg为示例。最后的3表示这是一个RGB图像。

也可以复制原有的图像来获得一副新图像。

[python] view plaincopy
  1. emptyImage2 = img.copy();  
如果不怕麻烦,还可以用cvtColor获得原图像的副本。
[python] view plaincopy
  1. emptyImage3=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)  
  2. #emptyImage3[...]=0  
后面的emptyImage3[...]=0是将其转成空白的黑色图像。

保存图像 

保存图像很简单,直接用cv2.imwrite即可。

cv2.imwrite("D:\\cat2.jpg", img)

第一个参数是保存的路径及文件名,第二个是图像矩阵。其中,imwrite()有个可选的第三个参数,如下:

cv2.imwrite("D:\\cat2.jpg", img,[int(cv2.IMWRITE_JPEG_QUALITY), 5])

第三个参数针对特定的格式: 对于JPEG,其表示的是图像的质量,用0-100的整数表示,默认为95。 注意,cv2.IMWRITE_JPEG_QUALITY类型为Long,必须转换成int。下面是以不同质量存储的两幅图:

对于PNG,第三个参数表示的是压缩级别。cv2.IMWRITE_PNG_COMPRESSION,从0到9,压缩级别越高,图像尺寸越小。默认级别为3:

[python] view plaincopy
  1. cv2.imwrite("./cat.png", img, [int(cv2.IMWRITE_PNG_COMPRESSION), 0])   
  2. cv2.imwrite("./cat2.png", img, [int(cv2.IMWRITE_PNG_COMPRESSION), 9])  
保存的图像尺寸如下:

还有一种支持的图像,一般不常用。

完整的代码为:

[python] view plaincopy
  1. import cv2  
  2. import numpy as np  
  3.   
  4. img = cv2.imread("./cat.jpg")  
  5. emptyImage = np.zeros(img.shape, np.uint8)  
  6.   
  7. emptyImage2 = img.copy()  
  8.   
  9. emptyImage3=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)  
  10. #emptyImage3[...]=0  
  11.   
  12. cv2.imshow("EmptyImage", emptyImage)  
  13. cv2.imshow("Image", img)  
  14. cv2.imshow("EmptyImage2", emptyImage2)  
  15. cv2.imshow("EmptyImage3", emptyImage3)  
  16. cv2.imwrite("./cat2.jpg", img, [int(cv2.IMWRITE_JPEG_QUALITY), 5])  
  17. cv2.imwrite("./cat3.jpg", img, [int(cv2.IMWRITE_JPEG_QUALITY), 100])  
  18. cv2.imwrite("./cat.png", img, [int(cv2.IMWRITE_PNG_COMPRESSION), 0])  
  19. cv2.imwrite("./cat2.png", img, [int(cv2.IMWRITE_PNG_COMPRESSION), 9])  
  20. cv2.waitKey (0)  
  21. cv2.destroyAllWindows()  

参考资料:
《OpenCV References Manuel》
《OpenCV  2 Computer Vision Application Programming Cookbook》
《OpenCV Computer Vision with Python》

未完待续...

转载地址:转载地址:http://blog.csdn.net/sunny2038/article/details/9057415

转载请详细注明原作者及出处,谢谢!

转载于:https://www.cnblogs.com/leytton/p/8253394.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/375768.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

大华出入口管理系统H710服务器配置,DH-DSS-H710S2 大华出入口综合管理系统 停车场收费 支持人脸相机设备添加...

DH-DSS-H710S2 大华出入口综合管理系统 支持车辆列表展示,包括车辆编号、车牌、车场、车辆品牌、车辆类型、车身颜色、车主等信息 支持通过人员编号、姓名进行人员信息查询 支持打印小票与导出缴费信息 DH-DSS-H710S2DH-DSS-H710S2大华出入口综合管理系统DH-DSS-H71…

微软块级备份引擎服务器,文件级与块级备份区别

首先我们先来了解一下,什么叫做块级?什么叫文件级?1.块级概念:块级是指以扇区为基础,一个或我连续的扇区组成一个块,也叫物理块。它是在文件系统与块设备(例如:磁盘驱动器)之间。2.文件级概念&a…

通过物理映射往虚拟机中传输数据

1、在虚拟机管理界面,找到硬盘,双击 2、在跳出的页面中点击“映射” 3、在弹出的页面中将“以只读模式打开文件”选项勾去 4、选择是“”是 5、这个时候就看到电脑上出现了一个“Z盘”,此时就可以将需要复制进虚拟机的文件,复制…

Ubuntu12.04版本安装arm-linux-gcc 4.3.3

由于Ubuntu12.04是64位系统,如果安装4.3.3版本的arm gcc,系统将会找到,所以要让其可用,就要安装ia32-lib包,以便让系统使用32bit软件: apt-get install ia32-libs 由于我前面已将安装好了gcc 4.3.3并且设置好了环境变量,所以安装完上面以后就可以查看gcc信息了: arm-linux-gcc …

[Algorithm] 字符串匹配算法——KMP算法

1 字符串匹配 字符串匹配是计算机的基本任务之一。 字符串匹配是什么?举例来说,有一个字符串"BBC ABCDAB ABCDABCDABDE",我想知道,里面是否包含另一个字符串"ABCDABD"? 许多算法可以完成这个任务&…

入门Git

本文是我在[实验楼]这个平台学习git时的第一篇学习笔记&#xff0c;现贴出来以飨大家&#xff01; git学习 1、git的配置 git的配置主要通过git config --global <配置名称> <配置的值>来对git进行配置 其中最常用的配置为&#xff1a; git config --global u…

小程序广告变现:探索创新路径实现盈利

随着移动互联网的不断发展&#xff0c;小程序作为一种轻量级应用形式&#xff0c;在用户中的普及程度不断提升。对于开发者而言&#xff0c;如何在小程序中实现盈利成为了一项挑战&#xff0c;而广告变现成为其中一种常见的经济模式。本文将深入探讨小程序广告变现的方式以及如…

服务器共享文件审计,内网安全管理系统-共享审计

在现代企事业单位的网络中&#xff0c;最常用的功能莫过于“共享文件”了。财务部门需要当月员工的考勤信息&#xff0c;人事部门可能不会亲自拿过去&#xff0c;而是在网络上共享&#xff1b;生产部门的生产报表也不会用书面的资料分发&#xff0c;而是放在网络的共享文件夹下…

介绍“Razor”— ASP.NET的一个新视图引擎

我的团队当前正在从事的工作之一就是为ASP.NET添加一个新的视图引擎。 一直以来&#xff0c;ASP.NET MVC都支持 “视图引擎”的概念—采用不同语法的模板的可插拔模块。当前ASP.NET MVC “默认”的视图引擎是ASP.NET Web窗体使用的.aspx/.ascx/.master文件模板。而当今其他一些…

w10系统打印服务器怎样出来,win10怎么打开关闭打印机服务教程步骤

当我们想要使用打印机服务时候&#xff0c;却不知道在哪里打开&#xff0c;对于win10系统&#xff0c;具体怎么操作呢?下面小编来告诉你开启和关闭打印机服务的方法吧&#xff0c;希望对你有帮助!Win10系统开启和关闭打印机服务的方法1、在Win10系统下&#xff0c;按住键盘的“…

获取函数的名字

c99标准中的__func__预定义标识符功能可以帮我们获取函数的名称 #include<string> #include<iostream> using namespace std;const char *hello(){return __func__; }int main(){cout<<hello()<<endl;return 0; }代码中的函数相当于&#xff1a; con…

浅谈自学方法论- 不断更新-记录思路

1. 用程序员的思想&#xff0c;去自学。 从主函数入手&#xff0c;也就是&#xff0c;了解整个框架。 2. 读书&#xff0c;带着宏观和微观的思路&#xff0c; 先不管看得懂看不懂看第一遍&#xff0c; 然后带着问题去读第二遍&#xff0c;并搜索不懂得关键词。 第三遍&#xff…

xp系统目前禁用索引服务器,WinXP系统中可以被禁用的服务对照表

application layer gateway service为internet连接共享和internet连接防火墙提供第三方协议插件的支持如果你没启用internet连接共享或windows xp内置防火墙&#xff0c;可以禁止这个服务。automatic updates自动从windows update启用windows更新的下载和安装需要时&#xff0c…

hadoop之linux常用命令

Linux的命令后面会有命令选项&#xff0c;有的选项还有选项值。选项的前面有短横线“-”&#xff0c;命令、选项、选项值之间使用空格隔开。有的命令没有选项&#xff0c;会有参数。选项是命令内置的功能&#xff0c;参数是用户提供的符合命令格式的内容。 1.1.1. 命…

c获取文件的名字和运行到程序的第几行功能

可以通过__FILE__和__LINE__两个宏获取文件的名字和代码运行的行数 #include<stdio.h> int main(){printf("file:%s line:%d\n",__FILE__,__LINE__);return 0; }__FILE__在linux中能获取到文件名称&#xff0c;但是在windows中获取的是带路径的名字。

MongoDB系列二

简介 MongoDB是一个基于分布式文件存储的数据库。由C语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决方案。 MongoDB是一个高性能&#xff0c;开源&#xff0c;无模式的文档型数据库&#xff0c;是当前NoSql数据库中比较热门的一种。 MongoDB是一个介于关系数据库和非关…

通过查看__cplusplus的值查看编译器的C++标准

C03标准中&#xff0c;__cplusplus被定义为199711L&#xff0c;而在C11中&#xff0c;__clpusplus则被定义为201103L #include<iostream> using namespace std; int main(){cout<<__cplusplus<<endl;return 0; }

Oracle-数据实现竖排打印

--存放重证评分的数据表create table ZZPFapache2( ZZ_datetime DATE, --时间 ZZ_zongfen INTEGER, --总分 ZZ_shiwanglui INTEGER, --死亡率 ZZ_BINGRENID VARCHAR2(50), --病人ID ZZ_h1f1 INTEGER, --第1行1个分 ZZ_h1m1 VARCHAR2(40), ZZ_h1f2 INTEGER, --第1行…

C#时间格式

可以这样写: date.ToString("yyyy年MM月", DateTimeFormatInfo.InvariantInfo) 日期转化二 DateTime dt DateTime.Now; Label1.Text dt.ToString();//2005-11-5 13:21:25 Label2.Text dt.ToFileTime().ToString();//127756416859912816 Label3.Text dt.ToFileTim…

C++11的静态断言

断言就是将一个返回值总是需要为真的判别式放在语句中&#xff0c;来排除在设计的逻辑上不应该出现的情况。C11标准中引入了静态断言&#xff1a;static_assert 在C标准中&#xff0c;<cassert>或assert.h为我们提供了assert宏&#xff0c;但是这个宏只有在运行时才进行…