赞
踩
首先,我已经讲过了cv2库的安装了,以及拓展的相关文件了
接下来咱们就开干吧~
- #导入cv2模块
- import cv2 as cv
-
- def face_detect_demo(img):
- gray=cv.cvtColor(img,cv.COLOR_BGR2GRAY)
- face_detect=cv.CascadeClassifier("D:\BaiduNetdiskDownload\OPENCV(WIN)\opencv\sources\data\haarcascades\haarcascade_frontalface_default.xml")
- face=face_detect.detectMultiScale(gray)#限制,最小是100×100,最大是1000×1000
- for x,y,w,h in face:
- cv.rectangle(img,(x,y),(x+w,y+h),color=(0,0,255),thickness=2)
- cv.imshow("result",img)
-
- #读取摄像头
- cap=cv.VideoCapture(0)
- #循环
- while True:
- flag,frame=cap.read()
- if not flag:
- break
- face_detect_demo(frame)
- if ord('q')==cv.waitKey(1):
- break
- #释放内存
- cv.destroyAllWindows(0)
- #释放摄像头
- cap.release()
-
-
-
-
-
-
-
- ''''#灰度转换
- gray_img=cv.cvtColor(img,cv.COLOR_BGR2GRAY)
- #显示灰度
- cv.imshow("gray",gray_img)
- #显示照片
- cv.imshow("read_img",img)
- #保存灰度照片
- cv.imwrite("gray_face11.jpg",gray_img)
- #等待
- cv.waitKey(0)
- #释放内存
- cv.destroyAllWindows()
- '''
这是整体的代码
下面咱们细细道来:
对其中的函数属性做个解释:
创建一个VideoCapture对象,它的参数可以是设备索引或视频文件的名称。
有时候cap可能尚未初始化捕获,通过 cap.isOpened() 方法检查它是否已初始化。如果是True,那么确定。否则使用cap.open()打开它
cap.read() 返回布尔值(True/ False)。如果正确读取该帧,它将为True
cv2.imshow之后要跟cv2.waitkey,他们是一对好兄弟
先解释下字面意思:
cv2.waitKey(1000)
:在1000ms内根据键盘输入返回一个值0xFF
:一个十六进制数ord('q')
:返回q的ascii码0xFF
是一个十六进制数,转换为二进制是11111111。waitKey返回值的范围为(0-255),刚好也是8个二进制位。那么我们将 cv2.waitKey(1) & 0xFF
计算一下(不知怎么计算的可以百度位与运算)发现结果仍然是waitKey的返回值,那为何要多次一举呢?直接 cv2.waitKey(1) == ord('q')
不就好了吗。
实际上在linux上使用waitkey有时会出现waitkey返回值超过了(0-255)的范围的现象。通过cv2.waitKey(1) & 0xFF
运算,当waitkey返回值正常时 cv2.waitKey(1)
= cv2.waitKey(1000) & 0xFF
,当返回值不正常时,cv2.waitKey(1000) & 0xFF
的范围仍不超过(0-255),就避免了一些奇奇怪怪的BUG。
- import cv2
-
- #摄像头
- cap=cv2.VideoCapture(0)
-
- flag=1
- num=1
-
- while(cap.isOpened()):#检测是否在开启状态
- ret_flag,Vshow=cap.read()#得到每帧图像
- cv2.imshow("Capture_Test",Vshow)#显示图像
- k=cv2.waitKey(1) &0xFF #按键判断
- if k==ord('s'):#保存
- cv2.imwrite(r"C:\Users\lenovo\Desktop\output/"+str(num)+".name"+".jpg",Vshow) #路径前面必须加一个r,否则会报错
- print("sucess to save",str(num)+".jpg")
- print("-----------")
- num+=1
- elif k==ord(' '):
- break
-
- cap.release()
- cv2.destroyAllWindows()
功能是从摄像头截取照片并进行保存到指定目录下,注意在路径前面要加一个r,要不然解析不出来路径,会报错
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。