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 相关文章推荐
scrapy自定义pipeline类实现将采集数据保存到mongodb的方法
Apr 16 Python
Python爬虫实现全国失信被执行人名单查询功能示例
May 03 Python
对Python字符串中的换行符和制表符介绍
May 03 Python
配置 Pycharm 默认 Test runner 的图文教程
Nov 30 Python
python 提取key 为中文的json 串方法
Dec 31 Python
pandas DataFrame 删除重复的行的实现方法
Jan 29 Python
django中forms组件的使用与注意
Jul 08 Python
python 修改本地网络配置的方法
Aug 14 Python
Python API len函数操作过程解析
Mar 05 Python
Cpython解释器中的GIL全局解释器锁
Nov 09 Python
在Windows下安装配置CPU版的PyTorch的方法
Apr 02 Python
详解Python内置模块Collections
Mar 22 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&&mysql)六
2006/10/09 PHP
PHP自毁程序(慎用)
2015/07/09 PHP
php+ajax无刷新上传图片的实现方法
2016/12/06 PHP
Thinkphp5+plupload实现的图片上传功能示例【支持实时预览】
2019/05/08 PHP
Jquery实现由下向上展开效果的例子
2014/12/08 Javascript
javascript实现链接单选效果的方法
2015/05/13 Javascript
jQuery表格行上移下移和置顶的实现方法
2015/10/08 Javascript
JavaScript文档碎片操作实例分析
2015/12/12 Javascript
jquery插件uploadify实现带进度条的文件批量上传
2015/12/13 Javascript
浅析js的模块化编写 require.js
2016/12/07 Javascript
浅谈js函数三种定义方式 & 四种调用方式 & 调用顺序
2017/02/19 Javascript
jQuery使用DataTable实现删除数据后重新加载功能
2017/02/27 Javascript
fullPage.js和CSS3实现全屏滚动效果
2017/05/05 Javascript
手把手教你写一个微信小程序(推荐)
2018/10/17 Javascript
解决微信浏览器缓存站点入口文件(IIS部署Vue项目)
2019/06/17 Javascript
vue prop属性传值与传引用示例
2019/11/13 Javascript
微信小程序实现上传多张图片、删除图片
2020/07/29 Javascript
[05:59]2018DOTA2国际邀请赛寻真——只为胜利的Secret
2018/08/13 DOTA
Python实现霍夫圆和椭圆变换代码详解
2018/01/12 Python
Python sorted函数详解(高级篇)
2018/09/18 Python
python画图系列之个性化显示x轴区段文字的实例
2018/12/13 Python
详解Python中的分支和循环结构
2020/02/11 Python
Python爬虫入门有哪些基础知识点
2020/06/02 Python
css3实现简单的白云飘动背景特效
2020/10/28 HTML / CSS
最耐用行李箱,一箱永流传:Briggs & Riley(全球终身保修)
2017/12/07 全球购物
世界顶级户外运动品牌折扣网站:LeftLane Sports
2019/06/12 全球购物
煤矿班组长的职责
2013/12/25 职场文书
小孩百日宴答谢词
2014/01/15 职场文书
财务会计自荐信范文
2014/02/21 职场文书
党员公开承诺践诺书
2014/03/25 职场文书
初三开学计划书
2014/04/27 职场文书
2015年收银员个人工作总结
2015/04/01 职场文书
吴仁宝观后感
2015/06/09 职场文书
感恩教师主题班会
2015/08/12 职场文书
体育教师研修感悟
2015/11/18 职场文书
Redis分布式锁Redlock的实现
2021/08/07 Redis