opencv2
opencv库包含许多计算机视觉的相关库文件,可以使用调用函数来实现计算机视觉的相应功能。大部分的时间都是用来实现对图片,视频的操作,当然在最近的一个news中,其实也不算新闻了,,介绍“刷脸签到应用"(
https://www.leiphone.com/news/201710/Niuqjv1wsqvIc46f.html)最后我也尝试性的实现这个System!不过在轻易实现之前,We 需要做跟多的基础工作,Knowledge 是必要的
1.1 对图片的操作
# -*- coding: cp936 -*-
import cv2
import numpy as np
from matplotlib import pyplot as plt
"this class is used for testing the opencv2 about operating the picture"
class testclass(object):
"the first test:how to open/write a picture"
def __init__(self):
pass
def dopicture(self,path):
self.path = path
img = cv2.imread(self.path,0) #0是一个参数:cv2.IMREAD_COLOR 灰度值
cv2.namedWindow('picture',cv2.WINDOW_NORMAL) #命名一个图片的窗口
cv2.imshow('picture',img) #展示图片
cv2.imwrite('D:/spicture.png',img)
cv2.waitKey(0)
cv2.destroyAllWindows() #摧毁所有打开的窗口
print "完成对图片的读取与写入功能"
"the second test :how to plot a picture by using matplotlib"
def plotpicture(self,path):
self.path = path
img = cv2.imread(self.path,0)
plt.imshow(img,cmap='gray',interpolation='bicubic')
plt.xticks([]),plt.yticks([])
plt.show
def test():
path = str(raw_input("请输入图片路径:>\n"))
pic = testclass()
pic.plotpicture(path)
print "test is effective!"
test()
1.2 对视频的处理
实际上在处理视频的应用中,常会用到两个functions:一个cv2.VideoCapture(),一个cv2.VideoWrite().
import numpy as np
import cv2
cap = cv2.VideoCapture('D:/test.mp4') #display a video
#创建一个Videocapture对象,后面的函数主要用来就是操作这个对象
while(True):
ret ,frame = cap.read()
ret = cap.set(3,320)
gray = cv2.cvtColor(frame,cv2.COLOR_BGR2GRAY)
cv2.imshow('frame',gray)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
cap.release()
cv2.destoryAllWindows()
知道如何读取视频之后,现在该思考怎么把视频存放在相应的文件夹,主要是Get out输出对象的操作,很大程度上与cap相似
# -*- coding: cp936 -*-
import numpy as np
import cv2
cap = cv2.VideoCapture(0)
fourcc = cv2.cv.CV_FOURCC(*'MJPG')
#there is a little problem!
#python3.0+版本采用语句:fourcc = cv2.VideoWriter_fourcc(*'XVID')
out = cv2.VideoWriter('D:/output.avi',fourcc,20.0,(640,480))
while(cap.isOpened()):
ret ,frame = cap.read()
ret = cap.set(3,320)
if(ret == True):
frame = cv2.flip(frame,0)
out.write(frame)
cv2.imshow('frame',frame)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
else:
break
cap.release()
out.release()
cv2.destroyAllWindows()
前面两个小点只是花生米,开始才刚刚开始,对于一个特征物体,我们更需要的是了解这个特征物的feature,顺带的去get这个feature detection,顺带去添加一些描述description,特征是个什么东东如官方API中一句话“
we may find it difficult to express it in words, but we know what are they
”