python 实时调取摄像头的示例代码


Posted in Python onNovember 25, 2020

调取摄像头的实现

import numpy as np
import cv2
cap = cv2.VideoCapture(0)
#参数为0时调用本地摄像头;url连接调取网络摄像头;文件地址获取本地视频
while(True):
ret,frame=cap.read()

#灰度化
gray=cv2.cvtColor(frame,cv2.COLOR_BGR2GRAY)
cv2.imshow('frame',gray)

#普通图片
cv2.imshow('frame',frame)

if cv2.waitKey(1)&0xFF==ord('q'):
break
cap.release()
cv2.destroyAllWindows()

opencv代码

# -*- coding: utf-8 -*-
"""
Spyder Editor

This is a temporary script file.
"""

#设置工作路径
import os
os.chdir('E:\\0yfl\\SH-spyder-workspace\\')
os.path.abspath('.')


import numpy as np
import cv2

#1.1读取图片imread;展示图片imshow;导出图片imwrite
#只是灰度图片
img=cv2.imread('Myhero.jpg',cv2.IMREAD_GRAYSCALE)
#彩色图片
img=cv2.imread('Myhero.jpg',cv2.IMREAD_COLOR)
#彩色以及带有透明度
img=cv2.imread('Myhero.jpg',cv2.IMREAD_UNCHANGED)
print(img)
#设置窗口可自动调节大小
cv2.namedWindow('image',cv2.WINDOW_NORMAL)
cv2.imshow('image',img)
k=cv2.waitKey(0)
#如果输入esc
if k==27:
  #exit
  cv2.destroyAllWindows
#如果输入s
elif k==ord('s'):
  #save picture and exit
  cv2.imwrite('Myhero_out.png',img)
  cv2.destroyAllWindows()


#1.2视频读取
#打开内置摄像头
cap=cv2.VideoCapture(0)
#打开视频
cap=cv2.VideoCapture('why.mp4')
#或者视频每秒多少帧的数据
fps=cap.get(5)
i=0
while(True):
  #读取一帧
  ret,frame=cap.read()
  #转化为灰图
  gray=cv2.cvtColor(frame,cv2.COLOR_BGR2GRAY)
  #设置导出文件名编号
  i = i + 1
  #每1s导出一张
  if i/fps==int(i/fps):
    #导出文件名为why+编号+.png
    #若想要导出灰图,则将下面frame改为gray即可
    cv2.imwrite("why"+str(int(i/fps))+".png",frame)
  #读完之后结束退出
  if cv2.waitKey(1)==ord('q'):
    break

cap.release()
cv2.destoryAllWindows()


#1.3图像像素修改
rangexmin=100
rangexmax=120
rangeymin=90
rangeymax=100
img=cv2.imread('Myhero.jpg',0)
img[rangexmin:rangexmax,rangeymin:rangeymax]=[[255]*(rangeymax-rangeymin)]*(rangexmax-rangexmin)
cv2.imwrite('Myhero_out2.png',img)

#拆分以及合并图像通道1
b,g,r=cv2.split(img)
img=cv2.merge(b,g,r)

#png转eps,不过非常模糊
from matplotlib import pyplot as plt
img=cv2.imread('wechat1.png',cv2.IMREAD_COLOR)
plt.imsave('wechat_out.eps',img)

#图像按比例混合
img1=cv2.imread('Myhero.jpg',cv2.IMREAD_COLOR)
img2=cv2.imread('Myhero_out.png',cv2.IMREAD_COLOR)
dst=cv2.addWeighted(img1,0.5,img2,0.5,0)
cv2.imwrite("Myhero_combi.jpg",dst)


#1.4按位运算
#加载图像
img1=cv2.imread("Myhero.jpg")
img2=cv2.imread("why1.png")
#后面那张图更大
rows,cols,channels=img1.shape
ROI=img2[0:rows,0:cols]
#做一个ROI为图像的大小
img2gray=cv2.cvtColor(img1,cv2.COLOR_BGR2GRAY)
#小于175的改为0,大于175的赋值为255
ret,mask=cv2.threshold(img2gray,175,255,cv2.THRESH_BINARY)
cv2.imwrite("Myhero_mask.jpg",mask)
#255-mask=mask_inv
mask_inv=cv2.bitwise_not(mask)
cv2.imwrite("Myhero_mask_inv.jpg",mask_inv)
#在mask白色区域显示成ROI,背景图片
img2_bg=cv2.bitwise_and(ROI,ROI,mask=mask)
cv2.imwrite("Myhero_pic2_backgroud.jpg",img2_bg)
#除了mask以外的区域都显示成img1,前景图片
img1_fg=cv2.bitwise_and(img1,img1,mask=mask_inv)
cv2.imwrite("Myhero_pic2_frontgroud.jpg",img1_fg)
#前景图片加上背景图片
dst = cv2.add(img2_bg,img1_fg)
img2[0:rows, 0:cols ] = dst
cv2.imwrite("Myhero_pic2_addgroud.jpg",dst)
#finished

#构建淹膜方法2
#截取帧
ret,frame=cap.read()
#转换到HSV
hsv=cv2.cvtColor(frame,cv2.COLOR_BGR2HSV)
#设定蓝色的阈值
lower_blue=np.array([110,50,50])
upper_blue=np.array([130,255,255])
#根据阈值构建掩模
mask=cv2.inRange(hsv,lower_blue,upper_blue)
#对原图像和掩模进行位运算
res=cv2.bitwise_and(frame,frame,mask=mask)


#图片放缩,用的插值方法,所以不会损害清晰度
res=cv2.resize(img1,None,fx=2,fy=2,interpolation=cv2.INTER_CUBIC)
cv2.imwrite("Myhero_bigger.jpg",res)
#第二种插值方法
height,width=img.shape[:2]
res=cv2.resize(img,(2*width,2*height),interpolation=cv2.INTER_CUBIC)

#edge现实图片中不好用,人工画的图片还可以
img = cv2.imread('why3.png',0)
edges = cv2.Canny(img,50,100)
cv2.imwrite("why3_edge.png",edges)

#识别轮廓,并保存轮廓点contours
img=cv2.imread('why129.png')
imgray=cv2.imread('why129.png',cv2.IMREAD_GRAYSCALE)
ret,thresh = cv2.threshold(imgray,127,255,0)
cv2.imwrite("2.jpg",thresh)
image, contours, hierarchy = cv2.findContours(thresh,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE)
img = cv2.drawContours(img, contours, -1, (0,255,0), 3)
cv2.imwrite("3.jpg",img)


#轮廓
img = cv2.imread('why3.png',0)
ret,thresh = cv2.threshold(img,127,255,0)
contours,hierarchy = cv2.findContours(thresh, 1, 2)
cnt = contours[0] 
#近似轮廓
epsilon = 0.1*cv2.arcLength(cnt,True)
approx = cv2.approxPolyDP(cnt,epsilon,True)

img = cv2.drawContours(img, approx, -1, (0,255,0), 3)
cv2.imwrite("4.jpg",img)

from matplotlib import pyplot as plt
#图像识别/匹配
img_rgb = cv2.imread('why174.png')
img_gray = cv2.cvtColor(img_rgb, cv2.COLOR_BGR2GRAY)
img2=img_gray.copy()
template = cv2.imread('0temp.png',0)
w, h = template.shape[::-1]
#共有六种识别方法
methods = ['cv2.TM_CCOEFF', 'cv2.TM_CCOEFF_NORMED', 'cv2.TM_CCORR', 'cv2.TM_CCORR_NORMED', 'cv2.TM_SQDIFF', 'cv2.TM_SQDIFF_NORMED']

for meth in methods:
  img = img2.copy()
  #eval返回某个式子的计算结果
  method = eval(meth)
  #下面使用匹配方法
  res = cv2.matchTemplate(img,template,method)
  min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(res)
  if method in [cv2.TM_SQDIFF, cv2.TM_SQDIFF_NORMED]:
    top_left = min_loc
  else:
    top_left = max_loc
  bottom_right = (top_left[0] + w, top_left[1] + h)
  #画矩形把他框出来
  cv2.rectangle(img,top_left, bottom_right, 255, 2)
  
  plt.subplot(121),plt.imshow(res,cmap = 'gray')
  plt.title('Matching Result'), plt.xticks([]), plt.yticks([])
  plt.subplot(122),plt.imshow(img,cmap = 'gray')
  plt.title('Detected Point'), plt.xticks([]), plt.yticks([])
  plt.suptitle(meth)
  
  plt.show()
  
#这个匹配结果太差
#选取3,5,6的匹配方式会稍微好点:cv2.TM_CCORR;cv2.TM_SQDIFF,cv2.TM_SQDIFF_NORMED

#视频人脸识别
#https://blog.csdn.net/wsywb111/article/details/79152425
import cv2
from PIL import Image
cap=cv2.VideoCapture("why.mp4")
#告诉Opencv使用人脸识别分类器
classfier=cv2.CascadeClassifier("E:\\0yfl\\opencv-master\\data\\haarcascades\\haarcascade_frontalface_alt2.xml")
count=0
while cap.isOpened():
  ret,frame=cap.read()
  if not ret:
    break
  grey=cv2.cvtColor(frame,cv2.COLOR_BGR2GRAY)
  faceRect=classfier.detectMultiScale(grey,scaleFactor=1.2, minNeighbors=3, minSize=(32, 32))
  if len(faceRect)>0:
    count=count+1
print(count)


#137这种程度可以识别,111没有成功识别,大概是侧脸的缘故
#截出人脸
image_name="why111.png"
frame=cv2.imread(image_name,0)
if not (frame is None):
  #导入测试集
  classfier=cv2.CascadeClassifier("E:\\0yfl\\opencv-master\\data\\haarcascades\\haarcascade_frontalface_alt2.xml")
  #使用测试集导出人脸的位置,存在faceRect中,可以检测多张人脸
  faceRect=classfier.detectMultiScale(frame,scaleFactor=3.0, minNeighbors=3, minSize=(32, 32))
  count=0
  for (x1,y1,w,h) in faceRect:
    count=count+1
    #截取上述图片的人脸部分并保存每一张识别出的人脸
    Image.open(image_name).crop((x1,y1,x1+w,y1+h)).save(image_name.split(".")[0]+"_face_"+str(count)+".png")
  if count==0:
    print ("No face detected!")
else:
  print ("Picture "+ image_name +" is not exist in "+os.path.abspath("."))
#人脸上画出矩形
from PIL import Image,ImageDraw
image_name="why111.png"
frame=cv2.imread(image_name,0)
if not (frame is None):
  classfier=cv2.CascadeClassifier("E:\\0yfl\\opencv-master\\data\\haarcascades\\haarcascade_frontalface_alt2.xml")
  faceRect=classfier.detectMultiScale(frame,scaleFactor=3.0, minNeighbors=3, minSize=(32, 32))
  #画框框
  img = Image.open(image_name)
  draw_instance = ImageDraw.Draw(img)
  count=0
  for (x1,y1,w,h) in faceRect:
    draw_instance.rectangle((x1,y1,x1+w,y1+h), outline=(255, 0,0))
    img.save('drawfaces_'+image_name)
    count=count+1
  if count==0:
    print ("No face detected!")
else:
  print ("Picture "+ image_name +" is not exist in "+os.path.abspath("."))


#detectFaces()返回图像中所有人脸的矩形坐标(矩形左上、右下顶点)
#使用haar特征的级联分类器haarcascade_frontalface_default.xml,在haarcascades目录下还有其他的训练好的xml文件可供选择。
#注:haarcascades目录下训练好的分类器必须以灰度图作为输入。


from PIL import Image,ImageDraw
image_name="why63.png"
frame=cv2.imread(image_name,0)
if not (frame is None):
  classfier=cv2.CascadeClassifier("E:\\0yfl\\opencv-master\\data\\haarcascades\\haarcascade_fullbody.xml")
  faceRect=classfier.detectMultiScale(frame,scaleFactor=3.0, minNeighbors=3, minSize=(32, 32))
  #画框框
  img = Image.open(image_name)
  draw_instance = ImageDraw.Draw(img)
  count=0
  for (x1,y1,w,h) in faceRect:
    draw_instance.rectangle((x1,y1,x1+w,y1+h), outline=(255, 0,0))
    img.save('drawfaces_'+image_name)
    count=count+1
  if count==0:
    print ("No face detected!")
else:
  print ("Picture "+ image_name +" is not exist in "+os.path.abspath("."))

以上就是python 实时调取摄像头的示例代码的详细内容,更多关于python 调取摄像头的资料请关注三水点靠木其它相关文章!

Python 相关文章推荐
跟老齐学Python之有容乃大的list(3)
Sep 15 Python
Python中常见的数据类型小结
Aug 29 Python
神经网络理论基础及Python实现详解
Dec 15 Python
Python for循环中的陷阱详解
Jul 13 Python
基于python3实现socket文件传输和校验
Jul 28 Python
Python实用工具FuckIt.py介绍
Jul 02 Python
详解python实现小波变换的一个简单例子
Jul 18 Python
django-rest-swagger的优化使用方法
Aug 29 Python
Django1.11自带分页器paginator的使用方法
Oct 31 Python
Python绘图实现显示中文
Dec 04 Python
Python环境管理virtualenv&virtualenvwrapper的配置详解
Jul 01 Python
10行Python代码实现Web自动化管控的示例代码
Aug 14 Python
Python存储读取HDF5文件代码解析
Nov 25 #Python
python 简单的调用有道翻译
Nov 25 #Python
浅析Python的命名空间与作用域
Nov 25 #Python
重构Python代码的六个实例
Nov 25 #Python
python try...finally...的实现方法
Nov 25 #Python
通过Python pyecharts输出保存图片代码实例
Nov 25 #Python
如何基于Python和Flask编写Prometheus监控
Nov 25 #Python
You might like
PHP 的 __FILE__ 常量
2007/01/15 PHP
php的日期处理函数及uchome的function_coomon中日期处理函数的研究
2011/01/12 PHP
CodeIgniter框架提示Disallowed Key Characters的解决办法
2014/04/21 PHP
Yii入门教程之目录结构、入口文件及路由设置
2014/11/25 PHP
yii中widget的用法
2014/12/03 PHP
php中的观察者模式简单实例
2015/01/20 PHP
基于jquery的blockui插件显示弹出层
2011/04/14 Javascript
javascript游戏开发之《三国志曹操传》零部件开发(三)情景对话中仿打字机输出文字
2013/01/23 Javascript
zeroclipboard 单个复制按钮和多个复制按钮的实现方法
2014/06/14 Javascript
一个不错的js html页面倒计时可精确到秒
2014/10/22 Javascript
基于javascript实现简单的抽奖系统
2020/04/15 Javascript
Bootstrap每天必学之标签页(Tab)插件
2020/08/09 Javascript
基于JS代码实现实时显示系统时间
2016/06/16 Javascript
js实现图片缓慢放大缩小效果
2016/08/02 Javascript
jQuery.uploadify文件上传组件实例讲解
2016/09/23 Javascript
jquery删除table当前行的实例代码
2016/10/07 Javascript
深入理解JavaScript中的块级作用域、私有变量与模块模式
2016/10/31 Javascript
vue实现nav导航栏的方法
2017/12/13 Javascript
vue 实现强制类型转换 数字类型转为字符串
2019/11/07 Javascript
jQuery实现弹幕特效
2019/11/29 jQuery
基于原生JS封装的Modal对话框插件的示例代码
2020/09/09 Javascript
python读取和保存视频文件
2018/04/16 Python
JavaScript实现一维数组转化为二维数组
2018/04/17 Python
解决pandas使用read_csv()读取文件遇到的问题
2018/06/15 Python
使用Python横向合并excel文件的实例
2018/12/11 Python
Python Lambda函数使用总结详解
2019/12/11 Python
解决tensorflow训练时内存持续增加并占满的问题
2020/01/19 Python
python异常处理、自定义异常、断言原理与用法分析
2020/03/23 Python
Python读取pdf表格写入excel的方法
2021/01/22 Python
python 图像增强算法实现详解
2021/01/24 Python
高三毕业生自我鉴定
2013/12/20 职场文书
中学教师师德承诺书
2014/05/23 职场文书
幽默自我介绍演讲稿
2014/08/21 职场文书
软件测试专业推荐信
2014/09/18 职场文书
国防教育标语
2014/10/08 职场文书
react合成事件与原生事件的相关理解
2021/05/13 Javascript