Opencv_Python学习笔记--OpenCV中的GUI特性
2015-09-01 15:37
639 查看
主要函数:
(1)读取图像文件的绝对路径;
(2)读取图像文件的模式。
如:
这段代码的意思是,读取位于E盘的PythonImage文件夹下的图像文件Image1.jpg,并将图像转换成灰度显示出来。
第二个参数取值为:
可以参考:http://blog.csdn.net/poem_qianmo/article/details/20537737
赋值时,可以给定需求的语句,也可以给定语句对应的整数。
(1)窗口名字,为String类型;
(2)需要显示的图像的变量名。
例如,
应用以上代码,我们可以将位于E盘目录下的图像在名为ImageDsiplay的窗口中显示出来,其中
我们也可以先创建一个窗口,然后再打开图像,在某种特殊的情况下,可能需要这么做,那么就需要用到
同样
(1)窗口命名,这个参数需要与
(2)窗口大小的创建。可选的参数有:
参照以下实例,了解一下具体的用法:
其中需要注意的是,如果是64位系统的话,
例如:
显示效果如下:
现在,改变
实际的原图效果是:
从图中明显看出Matplotlib显示的效果和原图的效果是有很大区别的,事实上,彩色图像使用OpenCV加载时是BGR模式,在Matplotib加载时是RGB模式。因此,在OpenCV中已经读取的彩色图片就不能在Matplotlib正常的显示。
其实,我们可以使用
得出的效果图是:
可以看出,修改过后的图像颜色显示是正常的。
有一个更简单的办法实现同样的功能:
使用这个方法可能需要更多的理解Numpy这个库在绘图中所承载的作用及实现的功能。
需要说明一下的就是Matplotlib库中的
关于Matplotlib库在绘图中的使用,还请参考:http://matplotlib.org/api/pyplot_api.html
cv2.imread() cv2.imshow() cv2.waitKey() cv2.namedWindow() cv2.destroyAllWimows()
1.读入图像
cv2.imread()其中包括两个参数:
(1)读取图像文件的绝对路径;
(2)读取图像文件的模式。
如:
cv2.imread(r"E:\PythonImage\Image1.jpg",0)
这段代码的意思是,读取位于E盘的PythonImage文件夹下的图像文件Image1.jpg,并将图像转换成灰度显示出来。
第二个参数取值为:
CV_LOAD_IMAGE_UNCHANGED = -1 CV_LOAD_IMAGE_GRAYSCALE = 0 CV_LOAD_IMAGE_COLOR = 1 CV_LOAD_IMAGE_ANYDEPTH = 2 CV_LOAD_IMAGE_ANYCOLOR = 4
可以参考:http://blog.csdn.net/poem_qianmo/article/details/20537737
赋值时,可以给定需求的语句,也可以给定语句对应的整数。
2.显示图像
cv2.imshow()函数也包含两个参数:
(1)窗口名字,为String类型;
(2)需要显示的图像的变量名。
例如,
img = cv2.imread(r"E:\PythonImage\Image1.jpg") cv2.imshow("ImageDisplay",img) cv2.waitKey(0) cv2.destroyAllWindows()
应用以上代码,我们可以将位于E盘目录下的图像在名为ImageDsiplay的窗口中显示出来,其中
cv2.waitKey()和
cv2.destroyAllWindows()函数分别有以下作用:
cv2.waitKey()函数的参数为等待的时间,也就是图像显示的时间,单位是毫秒(ms),如果参数置于0,意味着图像会一直显示,知道按下某一个按键。
cv2.destroyAllWindows()的作用是关闭窗口,如果函数形式是如
cv2.destroyAllWindow()这样,那么可以填入参数,参数为想要关闭的窗口的名称。
我们也可以先创建一个窗口,然后再打开图像,在某种特殊的情况下,可能需要这么做,那么就需要用到
cv2.namedWindow()函数,。
同样
cv2.namedWindow()函数也有两个参数:
(1)窗口命名,这个参数需要与
cv2.imshow()函数中的第一个参数保持一致;
(2)窗口大小的创建。可选的参数有:
WINDOW_AUTOSIZE和
WINDOW_NORMAL,其中AUTOSIZE创建的窗口是自动匹配打开图像的大小,NORMAL创建的窗口可以调整大小,当图像维太大,或者要添轨迹条时,调整窗口的大小将会很有用。
3.保存图像
如果我们需要将修改完的图像保存下来,那么我们就需要使用cv2.imwrite()函数。
cv2.imwrite()函数同样是两个参数:(1)保存文件的路径、文件名及类型;(2)需要保存的图像的变量名。
参照以下实例,了解一下具体的用法:
import cv2 import numpy as np img = cv2.imread("filename",parameter) cv2.imshow("ImageDispaly",img) i = cv2.waitKey(0) & 0xFF if i == 10: cv2.destroyAllWindows() elif i == ord("q"): cv2.imwrite("filename",parameter) cv2.destroyAllWindows()
其中需要注意的是,如果是64位系统的话,
cv2.waitKey(0)这一函数的后面需要加上
0xFF,语句。
4.OpenCV和Matplotlib图像显示不一致的问题
Matplotlib是Python的一个绘图库,经常结合Numy和Scipy等库使用,可以实现数据建模分析等功能。同样,在使用图像处理的过程中我们也可以使用Matplotloib库来完成图像的放大、保存等功能。例如:
#coding:utf-8 import numpy as np import cv2 from matplotlib import pyplot as plt img = cv2.imread(r"E:\PythonImage\temp\h_01.jpg,0) plt.imshow(img,cmap = "gray",interpolation = "bicubic") plt.xticks([]),plt.yticks([]) plt.show()
显示效果如下:
现在,改变
cv2.imread()函数的参数为
cv2.imread(r"E:\PythonImage\temp\dota.jpg",1),将图像以彩色的形式显示出来,效果是:
实际的原图效果是:
从图中明显看出Matplotlib显示的效果和原图的效果是有很大区别的,事实上,彩色图像使用OpenCV加载时是BGR模式,在Matplotib加载时是RGB模式。因此,在OpenCV中已经读取的彩色图片就不能在Matplotlib正常的显示。
其实,我们可以使用
split()函数来解决这个问题,我们还是使用同样的图像素材,修改一下代码:
#coding:utf-8 import cv2 import numpy as np import matplotlib.pyplot as plt img = cv2.imread(r"E:\PythonImage\temp\h_01.jpg") b,g,r = cv2.split(img) img2 = cv2.merge([r,g,b]) plt.subplot(121);plt.imshow(img) plt.subplot(122);plt.imshow(img2) plt.show() cv2.imshow('bgr image',img) cv2.imshow('rgb image',img2) cv2.waitKey(0) cv2.destroyAllWindows()
得出的效果图是:
可以看出,修改过后的图像颜色显示是正常的。
split()函数是一个通道分离的函数,从例子中可以清楚的看到
split()函数将图像以R,G,B三个通道分离出来,又使用
merge()函数重新组合起来,则同时得出
merge()函数的作用是通道组合。
有一个更简单的办法实现同样的功能:
img2 = img[:,:,::-1]
使用这个方法可能需要更多的理解Numpy这个库在绘图中所承载的作用及实现的功能。
需要说明一下的就是Matplotlib库中的
subplot()函数,其功能与Matlab中的
subplot()具有一样的功能,即:
subplot(121)中参数作用是创建一个1行2列的区域,并使这个图像显示在第一块分区。
关于Matplotlib库在绘图中的使用,还请参考:http://matplotlib.org/api/pyplot_api.html
相关文章推荐
- ssh批量登录并执行命令(python实现)
- python 正则表达式 学习笔记(不断补充ing)
- python的文档字符串
- python中时间格式
- python 函数递归 尾递归
- 使用Python的requests库作接口测试——响应结果处理
- python 中如何判断一个字符串中包不包含汉字
- python 函数参数(必选参数、默认参数、可选参数、关键字参数)
- python闭包实现,匿名函数的实现
- Python--迭代器
- python bug
- Python实现身份证号码解析
- python2.7学习笔记(7) ——函数式编程
- Python--生成器
- python logging 日志详细配置
- python string包——简易函数使用
- Python学习----高级特性
- python 查找指定内容的txt文件
- python编码问题
- 【转】python import的用法