通过Python 接口使用OpenCV的方法
一、在Anaconda2中配置OpenCV
解压opencv,添加系统环境变量,计算机-->右键属性-->高级系统设置-->环境变量-->系统变量-->编辑path-->添加F:\ProgramFiles(x86)\opencv-3.2.0-vc14\build\x64\vc14\bin
拷贝opencv/build/python/2.7/x64/cv2.pyd到Anaconda2/Lib/Site-packages/
注意:从上面python/2.7可以看出,opencv官方的python接口只支持Anaconda2的版本,如果你装的是Anaconda3的话,可以打开cmd,然后执行condainstall-chttps://conda.anaconda.org/menpoopencv3;
也可以参考此文章进行Anaconda3的配置
打开ipython测试一下
importcv2 print(cv2.__version__)
二、OpenCV基础知识
1.读取、显示和写入图像
importcv2 importmatplotlib.pyplotasplt #读取图像,第二个参数可以为1(默认读入彩图,可省略),0(以灰度图读入) im=cv2.imread('empire.jpg',1)#函数imread()返回图像为一个标准的NumPy数组 h,w=im.shape[:2] printh,w #显示图像,第一个参数是窗口的名字,其次才是我们的图像,窗口会自动调整为图像大小。 cv2.imshow('image',img) cv2.waitKey(0)#为防止图像一闪而过,无限期的等待键盘输入 cv2.destroyAllWindows()#关闭所有图像 #保存图像(必须设置保存图像的路径和扩展名) cv2.imwrite('result.png',im) #使用plt显示图像(可显示像素坐标及像素值)、保存图像 plt.imshow(im,cmap='gray',interpolation='bicubic') plt.show() plt.savefig('figpath.png',bbox_inches='tight')
2.颜色空间转换
在OpenCV中,图像不是按传统的RGB颜色通道,而是按BGR顺序(即RGB的倒序)存储的。读取图像时默认的是BGR,但是还有一些可用的转换函数。颜色空间的转换可以用函数cvtColor()来实现。
#1.使用opencv读取并创建灰度图像,按BGR顺序 im=cv2.imread('empire.jpg') gray=cv2.cvtColor(im,cv2.COLOR_BGR2GRAY) #2.使用matplotlib.image读入并创建灰度图像,按RGB顺序 importmatplotlib.imageasmpl_img im=mpl_img.imread('empire.jpg') gray=cv2.cvtColor(im,cv2.COLOR_RGB2GRAY) #Note:注意1和2的区别在颜色转换代码 #常用:cv2.COLOR_BGR2RGB、cv2.COLOR_GRAY2BGR、cv2.COLOR_BGR2HSV
3.在图像上画直线、矩形、圆、多边形(曲线)
画直线:cv2.line()
importcv2 #读取图像,按BGR顺序 img=cv2.imread('empire.jpg') #传入图像、起点坐标、终点坐标、线的颜色(color)、线的厚度(thickness) #color:Coloroftheshape.forBGR,passitasatuple,eg:(255,0,0)forblue.Forgrayscale,justpassthescalarvalue. #thickness:if-1ispassedforclosedfigureslikecircles,itwillfilltheshape,defaultthickness=1. img=cv2.line(img,(0,0),(511,511),(255,0,0),5)
画矩形:cv2.rectangle()
#需要传入图像、左上角顶点坐标、右下角顶点坐标、颜色、线宽 img=cv2.rectangle(img,(384,0),(510,128),(0,255,0),3)
画圆:cv2.circle()
#需要传入图像、圆的中心点坐标、半径、颜色、线宽 img=cv2.circle(img,(447,63),63,(0,0,255),-1) #If-1ispassedforclosedfigureslikecircles,itwillfilltheshape.defaultthickness=1
画多边形(包括曲线):cv2.polylines()
#数组的数据类型必须为int32,若知道曲线方程,可以生成一堆点,就可以画出曲线来啦 pts=np.array([[10,5],[20,30],[70,20],[50,10]],np.int32) #第一个参数为-1,表明这一维的长度(点的数量)是根据后面的维度的计算出来的 pts=pts.reshape((-1,1,2)) #如果第三个参数是False,我们得到的多边形是不闭合的(首尾不相连) img=cv2.polylines(img,[pts],True,(0,255,255))
在图片上添加文字:cv2.putText()
font=cv2.FONT_HERSHEY_SIMPLEX #第3~6个参数为:bottom-leftcornerwheredatastarts、fontsize、color、thickness cv2.putText(img,'OpenCV',(10,500),font,4,(255,255,255),2,cv2.LINE_AA)
4.图像的基础操作
获取并修改像素值
importcv2 importnumpyasnp img=cv2.imread('messi5.jpg') px=img[100,100] printpx [576368] #accessingonlybluepixel blue=img[100,100,0] printblue 57 #modifythepixel img[100,100]=[255,255,255] printimg[100,100] [255255255] #channel2所有值置为0 img[:,:,2]=0
获取图像属性
img=cv2.imread('messi5.jpg') printimg.shape (960L,1280L,3L) printimg.size 3686400 printimg.dtype uint8
选取图像块
img=cv2.imread('messi5.jpg') #selecttheballandcopyittoanotherregion ball=img[280:340,330:390]#注意:340和390取不到 img[273:333,100:160]=ball
以上这篇通过Python接口使用OpenCV的方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。