一、opencv调用摄像头是通过VideoCapture(0)
(1)、其中参数0:代表调用电脑自带摄像头;
(2)、如果参数为一则调用外接入usb摄像头;
(3)、官方其他用法(注释内容):""" VideoCapture() -> <VideoCapture object> or VideoCapture(filename) -> <VideoCapture object> or VideoCapture(filename, apiPreference) -> <VideoCapture object> or VideoCapture(index) -> <VideoCapture object> """
二、代码:
# coding=utf-8
import cv2 as cv
import numpy as np
# 读取视频,无声音
def get_video_info():
capture = cv.VideoCapture(0)
while(True):
# frame视频中的每一帧
ret,frame = capture.read()
# 摄像头反置
frame = cv.flip(frame, 1)
cv.imshow("video", frame)
# # 检验滤波
# frame = cv.medianBlur(frame, 5)
#
# # 锐化滤波
# kerrel = np.array([[0, -4, 0], [-4, 17, -4], [0, -4, 0]], np.float32)
# dst = cv.filter2D(frame, -1, kernel=kerrel)
cv.imshow("meddian_image", dst)
c = cv.waitKey(10)
if c == 27:
break
# 读取图片
def get_imgs_info(image):
print(type(image))
print(image.size)
print(image.shape)
print(image.dtype)
pixel_data = np.array(image)
print(pixel_data)
if __name__ == '__main__':
src = cv.imread('xiaofeng.jpg')
cv.namedWindow("xiaofeng", cv.WINDOW_AUTOSIZE)
cv.imshow("xiaofeng", src)
# get_imgs_info(src)
# # 灰度处理
# gray = cv.cvtColor(src,cv.COLOR_BGR2GRAY)
# # 保存
# cv.imwrite("xiaofeng_1.png", gray)
get_video_info()
cv.waitKey(0)
cv.destroyAllWindows()
三、cvWaitKey(k)介绍(转自:http://www.360doc.com/content/16/0928/20/25664332_594471048.shtml):
首先,在cvWaitKey(k)中,k的单位为毫秒,1000毫秒等于1秒,同时,根据资料的说明,在显示图像的时候,每秒显示 27、28帧的时候,我们看到的视频是流畅的。同时采取25帧的话,k=1000/25=40。即,每处理完一帧后,程序会等待40毫秒才会读取下一帧;
1.显示图像,一般要在cv.imshow()函数后加一句cv.WaitKey(0),此时程序显示出图像后将暂停,等待接收一个键盘输入;若没有这句话,则显示图像的代码很快就执行过去了,所以要用cvWaitKey()来暂停。(按Esc停止)
2.显示视频时,一般用cvWaitKey(delay) delay是延时的ms数。表示显示一帧,然后等delay ms ,再显示下一帧。如果没有cvWaitKey的话, 那么循环里面的每个指令执行时间为0.0000000001s,总之趋近于0.那么capture可能有10000帧图像, 那么10000帧图像也之需要0.000001s就播放完了, 结果你还没看到画面,就已经黑屏了(按Esc停止)。
3.你也可以加上自己喜欢的键让其退出,如(cv.waitKey(10) == ord('q')就是按下‘q’退出,也可写成cv.waitKey(10) == 113(‘q’的ACSH码为113))
c = cv.waitKey(50)
if c == 27:
break
4.所以该段代码是为了人眼能铺抓到视频内容与cv.waitKey(0)作用不同