您的位置:首页 > 编程语言 > Python开发

Python-OpenCV,基于标准文档的实例(一)

2018-03-27 00:00 417 查看

关于OpenCV

OpenCV是一个C++库,用于实时处理计算机视觉方面的问题,涵盖了很多计算机视觉领域的模块。

在Windows 上安装OpenCV-Python

一.

下载pip工具包并解压安装,
python setup.py install
下载地址:https://pypi.python.org/pypi/pip


测试是否成功安装

pip -v




二.

在pip解压目录下启动cmd窗口,或者将pip解压目录添加到path环境变量中,在cmd窗口中运行以下安装代码:

pip install --upgrade setuptools
pip install numpy Matplotlib
pip install opencv-python




以上测试在Python中成功安装并配置openCV

三.

cv2.imread()
读入图像

import numpy as np
import cv2
img=cv2.imread('cat.png',0)
print(img)


方法有两个参数

args[0]:读入一副彩色图像。图像的透明度会被忽略,这是默认参数。

args[1]:以灰度模式读入图像



四.

cv2.imshow()
显示图像

import numpy as np
import cv2
img=cv2.imread('cat.png',0)
cv2.imshow('image',img)
cv2.waitKey(0)
cv2.destroyAllWindows()


cv2.waitKey()
若传入的参数为0,则那它将会无限期的等待键盘输入。

cv2.destroyAllWindows()
可以删除任何我们建立的窗口。如果你想删除特定的窗口可以使用cv2.destroyWindow(),在括号内输入你想删除的窗口名。



五.

cv2.imwrite()
保存图像

按键盘
s
,保存图片

import numpy as np
import cv2
img=cv2.imread('cat.png',0)
cv2.imshow('image',img)
k=cv2.waitKey(0)
if k==27:
cv2.destroyAllWindows()
elif f==ord('s'):
cv2.imwrite('cat_copy.png',img)
cv2.destroyAllWindows()


如果你用的是64 位系统,你需要将 k = cv2.waitKey(0) 这行改成k =cv2.waitKey(0)&0xFF。

六.

Matplotib 是python 的一个绘图库,里头有各种各样的绘图方法。你可以学习怎样用Matplotib 显示图像。你可以放大图像,保存它等等.

import numpy as np
import cv2
from matplotlib import pyplot as plt
img=cv2.imread('cat.png',0)
plt.imshow(img, cmap = 'gray', interpolation = 'bicubic')
plt.xticks([]), plt.yticks([])
plt.show()




七.

用摄像头捕获视频,我们经常需要使用摄像头捕获实时图像。OpenCV 为这中应用提供了一个

非常简单的接口。让我们使用摄像头来捕获一段视频,并把它转换成灰度视频

显示出来。

import numpy as np
import cv2
cap=cv2.VideoCapture(0)
while(True):
ret,frame =cap.read()
gray=cv2.cvtColor(frame,cv2.COLOR_BGR2GRAY)
cv2.imshow('frame',gray)
if cv2.waitKey(1)&0xFF==ord('q'):
break
cap.release()
cv2.destroyAllWindows()


按 ’ q ’ 退出运行,同时关闭摄像头。

八.

从文件中播放视频 : 与从摄像头中捕获一样,你只需要把设备索引号改成视频文件的名字。在

播放每一帧时,使用cv2.waiKey() 设置适当的持续时间。如果设置的太低视频就会播放的非常快,如果设置的太高就会播放的很慢(你可以使用这种方法控制视频的播放速度)。通常情况下25 毫秒就可以了。

import numpy as np
import cv2
cap=cv2.VideoCapture('filename.mp4')
while(True):
ret , frame = cap.read()
gray = cv2.cvtColor(frame , cv2.COLOR_BGR2GRAY)
cv2.imshow('frame',gray)
if cv2.waitKey(1) &0xFF ==ord('q'):
break
cap.release()
cv2.destroyAllWindows()




九.

在我们捕获视频,并对每一帧都进行加工之后我们想要保存这个视频。对于图片来时很简单只需要使用
cv2.imwrite()


import numpy as np
import cv2
cap = cv2.VideoCapture(0)
fourcc=cv2.VideoWriter_fourcc(*'XVID')
out = cv2.VideoWriter('output.avi',fourcc, 20.0, (640,480))
while(cap.isOpened()):
ret, frame = cap.read()
frame = cv2.flip(frame,1)
if ret:
out.write(frame)
cv2.imshow('frame',frame)
else:
break
if cv2.waitKey(1) & 0xFF == ord('q'):
break
cap.release()
out.release()
cv2.destroyAllWindows()


十.

OpenCV 中的绘图函数

cv2.line()

cv2.circle()

cv2.rectangle()

cv2.ellipse()

cv2.putText()

画线:要画一条线,你只需要告诉函数这条线的起点和终点。

import numpy as np
import cv2
img=np.zeros((512,512,3), np.uint8)
cv2.line(img,(0,0),(511,511),(255,0,0),5)
cv2.imshow('image',img)
cv2.waitKey(0)
cv2.destroyAllWindows()




画矩形:要画一个矩形,你需要告诉函数的左上角顶点和右下角顶点的坐标。

cv2.rectangle(img,(384,0),(510,128),(0,255,0),3)


画圆:要画圆的话,只需要指定圆形的中心点坐标和半径大小。

cv2.circle(img,(447,63), 63, (0,0,255), -1)


画椭圆:画椭圆比较复杂,我们要多输入几个参数。一个参数是中心点的位置坐标。下一个参数是长轴和短轴的长度。椭圆沿逆时针方向旋转的角度。椭圆弧演顺时针方向起始的角度和结束角度,如果是0 很360,就是整个椭圆。

画多边形:画多边形,需要指点每个顶点的坐标。用这些点的坐标构建一个大小等于行数X1X2 的数组,行数就是点的数目。

pts=np.array([[10,5],[20,30],[70,20],[50,10]], np.int32)
pts=pts.reshape((-1,1,2))
cv2.polylines(img,[pts],True,(0,255,255))


最后得到下面的代码及图片

import numpy as np
import cv2
img=np.zeros((512,512,3), np.uint8)
cv2.line(img,(0,0),(511,511),(255,0,0),5)
cv2.rectangle(img,(384,0),(510,128),(0,255,0),3)
cv2.circle(img,(447,63), 63, (0,0,255), -1)
cv2.ellipse(img,(256,256),(100,50),0,0,180,255,-1)
pts=np.array([[10,5],[20,30],[70,20],[50,10]], np.int32) pts=pts.reshape((-1,1,2)) cv2.polylines(img,[pts],True,(0,255,255))
cv2.imshow('image',img)
cv2.waitKey(0)
cv2.destroyAllWindows()




十一:

在图片上添加文字

import numpy as np
import cv2
img=np.zeros((512,512,3), np.uint8)
font=cv2.FONT_HERSHEY_SIMPLEX
cv2.putText(img,'OpenCV',(10,500), font, 4,(255,255,255),2)
cv2.imshow('image',img)
cv2.waitKey(0)
cv2.destroyAllWindows()




十二:

把鼠标当画笔:
cv2.setMouseCallback()


双击画圆

import numpy as np
import cv2
def draw_circle(event,x,y,flags,param):
if event==cv2.EVENT_LBUTTONDBLCLK:
cv2.circle(img,(x,y),100,(255,0,0),-1)
img=np.zeros((512,512,3),np.uint8)
cv2.namedWindow('image')
cv2.setMouseCallback('image',draw_circle)
while(1):
cv2.imshow('image',img)
if cv2.waitKey(20)&0xFF==27:
break
cv2.destroyAllWindows()




根据我们选择的模式在拖动鼠标时绘制矩形或者是圆圈

import cv2
import numpy as np

drawing=False
mode=True
ix,iy=-1,-1
def draw_circle(event,x,y,flags,param):
global ix,iy,drawing,mode
if event==cv2.EVENT_LBUTTONDOWN:
drawing=True
ix,iy=x,y
elif event==cv2.EVENT_MOUSEMOVE and flags==cv2.EVENT_FLAG_LBUTTON:
if drawing==True:
if mode==True:
cv2.rectangle(img,(ix,iy),(x,y),(0,255,0),-1)
else:
cv2.circle(img,(x,y),3,(0,0,255),-1)
elif event==cv2.EVENT_LBUTTONUP:
drawing==False
img=np.zeros((512,512,3),np.uint8)
cv2.namedWindow('image')
cv2.setMouseCallback('image',draw_circle)
while(1):
cv2.imshow('image',img)
k=cv2.waitKey(1)&0xFF
if k==ord('m'):
mode=not mode
elif k==27:
break




未完待续…

附上参考openCV-Python中文文档下载地址:https://linux.linuxidc.com/index.php?folder=MjAxNcTq18rBzy841MIvOcjV
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: