调取摄像头的实现
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 调取摄像头的资料请关注其它相关文章!
广告合作:本站广告合作请联系QQ:858582 申请时备注:广告合作(否则不回)
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
暂无评论...
RTX 5090要首发 性能要翻倍!三星展示GDDR7显存
三星在GTC上展示了专为下一代游戏GPU设计的GDDR7内存。
首次推出的GDDR7内存模块密度为16GB,每个模块容量为2GB。其速度预设为32 Gbps(PAM3),但也可以降至28 Gbps,以提高产量和初始阶段的整体性能和成本效益。
据三星表示,GDDR7内存的能效将提高20%,同时工作电压仅为1.1V,低于标准的1.2V。通过采用更新的封装材料和优化的电路设计,使得在高速运行时的发热量降低,GDDR7的热阻比GDDR6降低了70%。
更新日志
2024年11月23日
2024年11月23日
- 凤飞飞《我们的主题曲》飞跃制作[正版原抓WAV+CUE]
- 刘嘉亮《亮情歌2》[WAV+CUE][1G]
- 红馆40·谭咏麟《歌者恋歌浓情30年演唱会》3CD[低速原抓WAV+CUE][1.8G]
- 刘纬武《睡眠宝宝竖琴童谣 吉卜力工作室 白噪音安抚》[320K/MP3][193.25MB]
- 【轻音乐】曼托凡尼乐团《精选辑》2CD.1998[FLAC+CUE整轨]
- 邝美云《心中有爱》1989年香港DMIJP版1MTO东芝首版[WAV+CUE]
- 群星《情叹-发烧女声DSD》天籁女声发烧碟[WAV+CUE]
- 刘纬武《睡眠宝宝竖琴童谣 吉卜力工作室 白噪音安抚》[FLAC/分轨][748.03MB]
- 理想混蛋《Origin Sessions》[320K/MP3][37.47MB]
- 公馆青少年《我其实一点都不酷》[320K/MP3][78.78MB]
- 群星《情叹-发烧男声DSD》最值得珍藏的完美男声[WAV+CUE]
- 群星《国韵飘香·贵妃醉酒HQCD黑胶王》2CD[WAV]
- 卫兰《DAUGHTER》【低速原抓WAV+CUE】
- 公馆青少年《我其实一点都不酷》[FLAC/分轨][398.22MB]
- ZWEI《迟暮的花 (Explicit)》[320K/MP3][57.16MB]