6 February 2020
OpenCV(1) -- Basics
by Jerry Zhang
Github
https://github.com/opencv
图片的位置在samples-> data
图片的基本操作
读取图片
用cv2.imread(param1, param2)。第一个参数是图片的路径或文件名,第二个参数是读取文件的类型,1表示读取彩色图片,0参数表示读取黑白图片,-1表示默认原图类型。
img = cv2.imread('lena.jpg', 0)
显示图片
用cv2.imshow()。第一个参数是给窗口起个名字,第二个参数是要显示的图片变量。这个函数之后,必须用另一个函数cv2.waitKey()设置这个窗口的存活时间,0表示无限期,直到用户关掉为止。最后还要用cv2.destroyAllWindows()把所有窗口都关掉。
cv2.imshow('image', img)
cv2.waitKey(0)
cv2.destroyAllWindows()
waitKey()这个函数还可以响应用户的按键。把它的返回值赋给一个变量,然后检查这个变量的值,就可以知道用户做了什么操作,(比如按了Esc键),从而做出对应的反应。
img = cv2.imread('lena.jpg', 0)
cv2.imshow('image', img)
k = cv2.waitKey(0)
if k == 27:
cv2.destroyAllWindows()
elif k == ord('s'):
cv2.imwrite('lena_copy.png', img)
cv2.destroyAllWindows()
视频
VideoCapture的参数是指哪一台摄像机或者视频文件,0代表默认的摄像头。也可以用cvtColor转换成黑白的。
import cv2 as cv
cap = cv.VideoCapture(0)
while(True):
ret, frame = cap.read()
# gray = cv.cvtColor(frame, cv.COLOR_BGR2GRAY)
cv.imshow('frame', frame)
if cv.waitKey(1) & 0xFF == ord('q'):
break
cap.release()
cv.destroyAllWindows()
或者
cap = cv.VideoCapture('name.avi')
还可以读取视频文件的属性。比如在while循环的条件里检查一下while(cap.isOpened())
,或者用get()函数获取某个属性值。
import cv2 as cv
cap = cv.VideoCapture(0)
while(True):
ret, frame = cap.read()
cap.get(cv.)
# gray = cv.cvtColor(frame, cv.COLOR_BGR2GRAY)
cv.imshow('frame', frame)
if cv.waitKey(1) & 0xFF == ord('q'):
break
cap.release()
cv.destroyAllWindows()
通过VideoWriter()函数可以录制视频
import cv2 as cv
cap = cv.VideoCapture(0)
fourcc = cv.VideoWriter_fourcc(*'XVID')
out = cv.VideoWriter('output.avi', fourcc, 20.0, (640, 480))
while(True):
ret, frame = cap.read()
if ret:
cap.get(cv.CAP_PROP_FRAME_WIDTH)
cap.get(cv.CAP_PROP_FRAME_HEIGHT)
out.write(frame)
# gray = cv.cvtColor(frame, cv.COLOR_BGR2GRAY)
cv.imshow('frame', frame)
if cv.waitKey(1) & 0xFF == ord('q'):
break
else:
break
cap.release()
out.release()
cv.destroyAllWindows()