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

2022-10-26 16:47:38 浏览数 (2)

关于OpenCV

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

在Windows 上安装OpenCV-Python

一.

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

测试是否成功安装 pip -v

二.

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

代码语言:javascript复制
pip install --upgrade setuptools
pip install numpy Matplotlib
pip install opencv-python

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

三.

cv2.imread() 读入图像

代码语言:javascript复制
import numpy as np
import cv2
img=cv2.imread('cat.png',0)
print(img)

方法有两个参数 args[0]:读入一副彩色图像。图像的透明度会被忽略,这是默认参数。 args[1]:以灰度模式读入图像

四.

cv2.imshow() 显示图像

代码语言:javascript复制
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,保存图片

代码语言:javascript复制
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 显示图像。你可以放大图像,保存它等等.

代码语言:javascript复制
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 为这中应用提供了一个 非常简单的接口。让我们使用摄像头来捕获一段视频,并把它转换成灰度视频 显示出来。

代码语言:javascript复制
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 毫秒就可以了。

代码语言:javascript复制
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()

代码语言:javascript复制
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()

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

代码语言:javascript复制
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()

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

代码语言:javascript复制
cv2.rectangle(img,(384,0),(510,128),(0,255,0),3)

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

代码语言:javascript复制
cv2.circle(img,(447,63), 63, (0,0,255), -1)

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

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

代码语言:javascript复制
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))

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

代码语言:javascript复制
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()

十一:

在图片上添加文字

代码语言:javascript复制
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() 双击画圆

代码语言:javascript复制
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()

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

代码语言:javascript复制
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

0 人点赞