第一个例子

http://blog.csdn.net/sunny2038/article/details/9057415 学习了这个作者的文章

本文是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. img = cv2.imread("D:\\cat.jpg")
  3. cv2.namedWindow("Image")
  4. cv2.imshow("Image", img)
  5. cv2.waitKey (0)
  6. 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. img = cv2.imread("./cat.jpg")
  4. emptyImage = np.zeros(img.shape, np.uint8)
  5. emptyImage2 = img.copy()
  6. emptyImage3=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
  7. #emptyImage3[...]=0
  8. cv2.imshow("EmptyImage", emptyImage)
  9. cv2.imshow("Image", img)
  10. cv2.imshow("EmptyImage2", emptyImage2)
  11. cv2.imshow("EmptyImage3", emptyImage3)
  12. cv2.imwrite("./cat2.jpg", img, [int(cv2.IMWRITE_JPEG_QUALITY), 5])
  13. cv2.imwrite("./cat3.jpg", img, [int(cv2.IMWRITE_JPEG_QUALITY), 100])
  14. cv2.imwrite("./cat.png", img, [int(cv2.IMWRITE_PNG_COMPRESSION), 0])
  15. cv2.imwrite("./cat2.png", img, [int(cv2.IMWRITE_PNG_COMPRESSION), 9])
  16. cv2.waitKey (0)
  17. cv2.destroyAllWindows()

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

时间: 2024-10-30 08:26:29

第一个例子的相关文章

04springMVC结构,mvc模式,spring-mvc流程,spring-mvc的第一个例子,三种handlerMapping,几种控制器,springmvc基于注解的开发,文件上传,拦截器,s

 1. Spring-mvc介绍 1.1市面上流行的框架 Struts2(比较多) Springmvc(比较多而且属于上升的趋势) Struts1(即将被淘汰) 其他 1.2  spring-mvc结构 DispatcherServlet:中央控制器,把请求给转发到具体的控制类 Controller:具体处理请求的控制器(配置文件方式需要配置,注解方式不用配置) handlerMapping:映射处理器,负责映射中央处理器转发给controller时的映射策略 ModelAndView:服务

1jdbc简介+第一个例子

第一章 简介 JDBC(Java Data Base Connectivity的缩写,中文:java数据库互连),由一些接口和类构成的API. J2SE的一部分,由java.sql(1.0),  javax.sql(2.0里的新特性)包组成. 1996,SUN提出为java程序开发人员访问各种数据库提供了统一的编程接口,可以屏蔽底层数据库的不同. 相关概念: ODBC:Open Datebase Connectivity,开放数据库互连 C和关系型数据库交互的一种方式,微软提出的. Driver

emberjs学习一(环境和第一个例子)

code { margin: 0; padding: 0; white-space: pre; border: none; background: transparent; } code, pre tt { background-color: transparent; border: none; } --> emberjs学习一(环境和第一个例子) 博客:http://www.cnblogs.com/xiangbing/p/emberjs-test.html 案例:http://www.love

Qt之QCustomPlot绘图(一)配置和第一个例子

最近一个用Qt开发的项目需要绘制坐标曲线,我在老师的指点下使用了QCustomPlot这个插件,使用方法简单,功能还算不错. 可是在网上找了很多资料和博文都只是将官方提供的例子演示一遍,没有系统全面的学习资料,所以我决定把自己在探索过程中获得的一些开发实例和经验分享出来,与大家共同学习交流,请各位朋友多多指教. 一.QCustomPlot的安装 官方下载地址:http://www.qcustomplot.com/index.php/download 推荐下载第一个链接,里面有很多官方给的例子可以

Linux 设备驱动的第一个例子 。

Hello World Linux 设备驱动的第一个例子 . 一. 源程序( hello.c )   #include <linux/init.h> #include <linux/module.h> MODULE_LICENSE("Dual BSD/GPL"); static int hello_init(void) { printk(KERN_ALERT "Hello, world/n"); return 0; } static void

hibernate第一个例子-保存对象

3.hibernate第一个例子-保存对象 使用hibernate框架需要导入的jar包: antlr-2.7.6 backport-util-concurrent c3p0-0.9.1 commons-collections-3.1    apache集合帮助的包 commons-logging-1.1.1日志 dom4j-1.6.1解析XML ehcache-1.5.0缓存框架 hibernate3hibernate核心包 javassist-3.9.0.GA代理模式工具包,解决懒加载问题

Hibernate学习的第一个例子

这是本人学习Hibernate的第一个例子: 1,先配置数据库驱动,点击myeclipse的myeclipse Database Explore,选择相应的数据库,进行配置,完成之后退出. 2,给项目添加支持Hibernate的功能,使用到的jar包有如下的: 进行了一系列的选项之后,到sessionfactory这一项,不选.然后点击完成. 3,配置表到java类的映射.点击右上方的myeclipse中的myeclipse database expore视图,选择数据驱动,选中要操作的表,然后

ThinkPHP3.2.2:记录一下第一个例子的运行过程

初次学习php框架,查了一下,据说laravel市场占有最高,但是根本装不了啊.需要cmd下用https方式进行下载,各种帆樯软件都用上了,根本没法用,坑死人了.由百度一下,国内的php框架据说thinkPHP热度很高,从ThinkPHP主站http://www.thinkphp.cn/看了半天教程也没看懂,自己摸索吧.记录一下第一个例子的运行过程,防止以后忘记. 1.安装WAMPServer,到D:\wamp\. 2.下载ThinkPHP3.2.2核心版.解压缩后,放到D:\wamp\www\

第一个例子没有问题,第二个例子出现了

第一个是hibernate基本的配置hibernate.cfg.xml ->*.hbm.xml... Hibernate: insert into user (id, name, password, say) values (null, ?, ?, ?) 第二个是hibernate的annotation的基本基本配置就是hibernate.cfg.xml ->实体类中加注解@entity... Hibernate: insert into Teacher (name, password, sa

Informatica_(2)第一个例子

PowerCenter Repository Manager1.启动客户端程序连接服务器打开客户端(PowerCenter Repository Manager)PCRM;存储库--配置域--添加新域:填写域名(Domain_1).网关主机(SC-201709251400).网关端口后(6005),点“确定”:选中右边的存储库(BI),点“确定”:双击左边导航中的BI存储库,填写用户名.密码(admin),点“连接”:BI存储库显示在工作区,客户端连接服务器成功. 2.创建文件夹点文件夹-->创