织梦CMS - 轻松建站从此开始!

罗索

python调用摄像头

jackyhwei 发布于 2020-05-05 23:08 点击:次 
1.python实时调取本地摄像头 importnumpyasnp importcv2 cap = cv2 .VideoCapture(0) #参数为0时调用本地摄像头;url连接调取网络摄像头;文件地址获取本地视频 while(True): ret, frame = cap .read() #灰度化 gray = cv2
TAG: python  

1.python实时调取本地摄像头

  1. import numpy as np 
  2. import cv2 
  3. cap = cv2.VideoCapture(0)    #参数为0时调用本地摄像头;url连接调取网络摄像头;文件地址获取本地视频 
  4. while(True): 
  5. ret,frame=cap.read() 
  6.  
  7. #灰度化 
  8. gray=cv2.cvtColor(frame,cv2.COLOR_BGR2GRAY) 
  9. cv2.imshow('frame',gray) 
  10.  
  11. #普通图片 
  12. cv2.imshow('frame',frame) 
  13.  
  14. if cv2.waitKey(1)&0xFF==ord('q'): 
  15. break 
  16. cap.release() 
  17. cv2.destroyAllWindows() 

2.opencv代码

  1. # -*- coding: utf-8 -*- 
  2. """ 
  3. Spyder Editor 
  4.  
  5. This is a temporary script file. 
  6. """ 
  7.  
  8. #设置工作路径 
  9. import os 
  10. os.chdir('E:\\0yfl\\SH-spyder-workspace\\') 
  11. os.path.abspath('.') 
  12.  
  13.  
  14. import numpy as np 
  15. import cv2 
  16.  
  17. #1.1读取图片imread;展示图片imshow;导出图片imwrite 
  18. #只是灰度图片 
  19. img=cv2.imread('Myhero.jpg',cv2.IMREAD_GRAYSCALE) 
  20. #彩色图片 
  21. img=cv2.imread('Myhero.jpg',cv2.IMREAD_COLOR) 
  22. #彩色以及带有透明度 
  23. img=cv2.imread('Myhero.jpg',cv2.IMREAD_UNCHANGED) 
  24. print(img) 
  25. #设置窗口可自动调节大小 
  26. cv2.namedWindow('image',cv2.WINDOW_NORMAL) 
  27. cv2.imshow('image',img) 
  28. k=cv2.waitKey(0) 
  29. #如果输入esc 
  30. if k==27: 
  31.     #exit 
  32.     cv2.destroyAllWindows 
  33. #如果输入s 
  34. elif k==ord('s'): 
  35.     #save picture and exit 
  36.     cv2.imwrite('Myhero_out.png',img) 
  37.     cv2.destroyAllWindows() 
  38.  
  39.  
  40. #1.2视频读取 
  41. #打开内置摄像头 
  42. cap=cv2.VideoCapture(0) 
  43. #打开视频 
  44. cap=cv2.VideoCapture('why.mp4') 
  45. #或者视频每秒多少帧的数据 
  46. fps=cap.get(5) 
  47. i=0 
  48. while(True): 
  49.     #读取一帧 
  50.     ret,frame=cap.read() 
  51.     #转化为灰图 
  52.     gray=cv2.cvtColor(frame,cv2.COLOR_BGR2GRAY) 
  53.     #设置导出文件名编号 
  54.     ii = i + 1 
  55.     #每1s导出一张 
  56.     if i/fps==int(i/fps): 
  57.         #导出文件名为why+编号+.png 
  58.         #若想要导出灰图,则将下面frame改为gray即可 
  59.         cv2.imwrite("why"+str(int(i/fps))+".png",frame) 
  60.     #读完之后结束退出 
  61.     if cv2.waitKey(1)==ord('q'): 
  62.         break 
  63.  
  64. cap.release() 
  65. cv2.destoryAllWindows() 
  66.  
  67.  
  68. #1.3图像像素修改 
  69. rangexmin=100 
  70. rangexmax=120 
  71. rangeymin=90 
  72. rangeymax=100 
  73. img=cv2.imread('Myhero.jpg',0) 
  74. img[rangexmin:rangexmax,rangeymin:rangeymax]=[[255]*(rangeymax-rangeymin)]*(rangexmax-rangexmin) 
  75. cv2.imwrite('Myhero_out2.png',img) 
  76.  
  77. #拆分以及合并图像通道1 
  78. b,g,r=cv2.split(img) 
  79. img=cv2.merge(b,g,r) 
  80.  
  81. #png转eps,不过非常模糊 
  82. from matplotlib import pyplot as plt 
  83. img=cv2.imread('wechat1.png',cv2.IMREAD_COLOR) 
  84. plt.imsave('wechat_out.eps',img) 
  85.  
  86. #图像按比例混合 
  87. img1=cv2.imread('Myhero.jpg',cv2.IMREAD_COLOR) 
  88. img2=cv2.imread('Myhero_out.png',cv2.IMREAD_COLOR) 
  89. dst=cv2.addWeighted(img1,0.5,img2,0.5,0) 
  90. cv2.imwrite("Myhero_combi.jpg",dst) 
  91.  
  92.  
  93. #1.4按位运算 
  94. #加载图像 
  95. img1=cv2.imread("Myhero.jpg") 
  96. img2=cv2.imread("why1.png") 
  97. #后面那张图更大 
  98. rows,cols,channels=img1.shape 
  99. ROI=img2[0:rows,0:cols] 
  100. #做一个ROI为图像的大小 
  101. img2gray=cv2.cvtColor(img1,cv2.COLOR_BGR2GRAY) 
  102. #小于175的改为0,大于175的赋值为255 
  103. ret,mask=cv2.threshold(img2gray,175,255,cv2.THRESH_BINARY) 
  104. cv2.imwrite("Myhero_mask.jpg",mask) 
  105. #255-mask=mask_inv 
  106. mask_inv=cv2.bitwise_not(mask) 
  107. cv2.imwrite("Myhero_mask_inv.jpg",mask_inv) 
  108. #在mask白色区域显示成ROI,背景图片 
  109. img2_bg=cv2.bitwise_and(ROI,ROI,maskmask=mask) 
  110. cv2.imwrite("Myhero_pic2_backgroud.jpg",img2_bg) 
  111. #除了mask以外的区域都显示成img1,前景图片 
  112. img1_fg=cv2.bitwise_and(img1,img1,mask=mask_inv
  113. cv2.imwrite("Myhero_pic2_frontgroud.jpg",img1_fg) 
  114. #前景图片加上背景图片 
  115. dst = cv2.add(img2_bg,img1_fg) 
  116. img2[0:rows, 0:cols ] = dst 
  117. cv2.imwrite("Myhero_pic2_addgroud.jpg",dst) 
  118. #finished 
  119.  
  120. #构建淹膜方法2 
  121. #截取帧 
  122. ret,frame=cap.read() 
  123. #转换到HSV 
  124. hsv=cv2.cvtColor(frame,cv2.COLOR_BGR2HSV) 
  125. #设定蓝色的阈值 
  126. lower_blue=np.array([110,50,50]) 
  127. upper_blue=np.array([130,255,255]) 
  128. #根据阈值构建掩模 
  129. mask=cv2.inRange(hsv,lower_blue,upper_blue) 
  130. #对原图像和掩模进行位运算 
  131. res=cv2.bitwise_and(frame,frame,maskmask=mask) 
  132.  
  133.  
  134. #图片放缩,用的插值方法,所以不会损害清晰度 
  135. res=cv2.resize(img1,None,fx=2,fy=2,interpolation=cv2.INTER_CUBIC) 
  136. cv2.imwrite("Myhero_bigger.jpg",res) 
  137. #第二种插值方法 
  138. height,width=img.shape[:2] 
  139. res=cv2.resize(img,(2*width,2*height),interpolation=cv2.INTER_CUBIC) 
  140.  
  141. #edge现实图片中不好用,人工画的图片还可以 
  142. img = cv2.imread('why3.png',0) 
  143. edges = cv2.Canny(img,50,100) 
  144. cv2.imwrite("why3_edge.png",edges) 
  145.  
  146. #识别轮廓,并保存轮廓点contours 
  147. img=cv2.imread('why129.png') 
  148. imgray=cv2.imread('why129.png',cv2.IMREAD_GRAYSCALE) 
  149. ret,thresh = cv2.threshold(imgray,127,255,0) 
  150. cv2.imwrite("2.jpg",thresh) 
  151. image, contours, hierarchy = cv2.findContours(thresh,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE) 
  152. img = cv2.drawContours(img, contours, -1, (0,255,0), 3) 
  153. cv2.imwrite("3.jpg",img) 
  154.  
  155.  
  156. #轮廓 
  157. img = cv2.imread('why3.png',0) 
  158. ret,thresh = cv2.threshold(img,127,255,0) 
  159. contours,hierarchy = cv2.findContours(thresh, 1, 2) 
  160. cnt = contours[0]  
  161. #近似轮廓 
  162. epsilon = 0.1*cv2.arcLength(cnt,True) 
  163. approx = cv2.approxPolyDP(cnt,epsilon,True) 
  164.  
  165. img = cv2.drawContours(img, approx, -1, (0,255,0), 3) 
  166. cv2.imwrite("4.jpg",img) 
  167.  
  168. from matplotlib import pyplot as plt 
  169. #图像识别/匹配 
  170. img_rgb = cv2.imread('why174.png') 
  171. img_gray = cv2.cvtColor(img_rgb, cv2.COLOR_BGR2GRAY) 
  172. img2=img_gray.copy() 
  173. template = cv2.imread('0temp.png',0) 
  174. w, h = template.shape[::-1] 
  175. #共有六种识别方法 
  176. methods = ['cv2.TM_CCOEFF', 'cv2.TM_CCOEFF_NORMED', 'cv2.TM_CCORR', 'cv2.TM_CCORR_NORMED', 'cv2.TM_SQDIFF', 'cv2.TM_SQDIFF_NORMED'] 
  177.  
  178. for meth in methods: 
  179.     img = img2.copy() 
  180.     #eval返回某个式子的计算结果 
  181.     method = eval(meth) 
  182.     #下面使用匹配方法 
  183.     res = cv2.matchTemplate(img,template,method) 
  184.     min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(res) 
  185.     if method in [cv2.TM_SQDIFF, cv2.TM_SQDIFF_NORMED]: 
  186.         top_left = min_loc 
  187.     else: 
  188.         top_left = max_loc 
  189.     bottom_right = (top_left[0] + w, top_left[1] + h) 
  190.     #画矩形把他框出来 
  191.     cv2.rectangle(img,top_left, bottom_right, 255, 2) 
  192.      
  193.     plt.subplot(121),plt.imshow(res,cmap = 'gray'
  194.     plt.title('Matching Result'), plt.xticks([]), plt.yticks([]) 
  195.     plt.subplot(122),plt.imshow(img,cmap = 'gray'
  196.     plt.title('Detected Point'), plt.xticks([]), plt.yticks([]) 
  197.     plt.suptitle(meth) 
  198.      
  199.     plt.show() 
  200.      
  201. #这个匹配结果太差 
  202. #选取3,5,6的匹配方式会稍微好点:cv2.TM_CCORR;cv2.TM_SQDIFF,cv2.TM_SQDIFF_NORMED 
  203.  
  204. #视频人脸识别 
  205. #https://blog.csdn.net/wsywb111/article/details/79152425 
  206. import cv2 
  207. from PIL import Image 
  208. cap=cv2.VideoCapture("why.mp4") 
  209. #告诉Opencv使用人脸识别分类器 
  210. classfier=cv2.CascadeClassifier("E:\\0yfl\\opencv-master\\data\\haarcascades\\haarcascade_frontalface_alt2.xml") 
  211. count=0 
  212. while cap.isOpened(): 
  213.     ret,frame=cap.read() 
  214.     if not ret: 
  215.         break 
  216.     grey=cv2.cvtColor(frame,cv2.COLOR_BGR2GRAY) 
  217.     faceRect=classfier.detectMultiScale(grey,scaleFactor=1.2, minNeighbors=3minSize=(32, 32)) 
  218.     if len(faceRect)>0: 
  219.         countcount=count+1 
  220. print(count) 
  221.  
  222.  
  223. #137这种程度可以识别,111没有成功识别,大概是侧脸的缘故 
  224. #截出人脸 
  225. image_name="why111.png" 
  226. frame=cv2.imread(image_name,0) 
  227. if not (frame is None): 
  228.     #导入测试集 
  229.     classfier=cv2.CascadeClassifier("E:\\0yfl\\opencv-master\\data\\haarcascades\\haarcascade_frontalface_alt2.xml") 
  230.     #使用测试集导出人脸的位置,存在faceRect中,可以检测多张人脸 
  231.     faceRect=classfier.detectMultiScale(frame,scaleFactor=3.0, minNeighbors=3minSize=(32, 32)) 
  232.     count=0 
  233.     for (x1,y1,w,h) in faceRect: 
  234.         countcount=count+1 
  235.         #截取上述图片的人脸部分并保存每一张识别出的人脸 
  236.         Image.open(image_name).crop((x1,y1,x1+w,y1+h)).save(image_name.split(".")[0]+"_face_"+str(count)+".png") 
  237.     if count==0: 
  238.         print ("No face detected!") 
  239. else: 
  240.     print ("Picture "+ image_name +" is not exist in "+os.path.abspath(".")) 
  241. #人脸上画出矩形 
  242. from PIL import Image,ImageDraw 
  243. image_name="why111.png" 
  244. frame=cv2.imread(image_name,0) 
  245. if not (frame is None): 
  246.     classfier=cv2.CascadeClassifier("E:\\0yfl\\opencv-master\\data\\haarcascades\\haarcascade_frontalface_alt2.xml") 
  247.     faceRect=classfier.detectMultiScale(frame,scaleFactor=3.0, minNeighbors=3minSize=(32, 32)) 
  248.     #画框框 
  249.     img = Image.open(image_name) 
  250.     draw_instance = ImageDraw.Draw(img) 
  251.     count=0 
  252.     for (x1,y1,w,h) in faceRect: 
  253.         draw_instance.rectangle((x1,y1,x1+w,y1+h), outline=(255, 0,0)) 
  254.         img.save('drawfaces_'+image_name) 
  255.         countcount=count+1 
  256.     if count==0: 
  257.         print ("No face detected!") 
  258. else: 
  259.     print ("Picture "+ image_name +" is not exist in "+os.path.abspath(".")) 
  260.  
  261.  
  262. #detectFaces()返回图像中所有人脸的矩形坐标(矩形左上、右下顶点) 
  263. #使用haar特征的级联分类器haarcascade_frontalface_default.xml,在haarcascades目录下还有其他的训练好的xml文件可供选择。 
  264. #注:haarcascades目录下训练好的分类器必须以灰度图作为输入。 
  265.  
  266.  
  267. from PIL import Image,ImageDraw 
  268. image_name="why63.png" 
  269. frame=cv2.imread(image_name,0) 
  270. if not (frame is None): 
  271.     classfier=cv2.CascadeClassifier("E:\\0yfl\\opencv-master\\data\\haarcascades\\haarcascade_fullbody.xml") 
  272.     faceRect=classfier.detectMultiScale(frame,scaleFactor=3.0, minNeighbors=3minSize=(32, 32)) 
  273.     #画框框 
  274.     img = Image.open(image_name) 
  275.     draw_instance = ImageDraw.Draw(img) 
  276.     count=0 
  277.     for (x1,y1,w,h) in faceRect: 
  278.         draw_instance.rectangle((x1,y1,x1+w,y1+h), outline=(255, 0,0)) 
  279.         img.save('drawfaces_'+image_name) 
  280.         countcount=count+1 
  281.     if count==0: 
  282.         print ("No face detected!") 
  283. else: 
  284.     print ("Picture "+ image_name +" is not exist in "+os.path.abspath(".")) 

 

 

 

 

(StarZhai)
本站文章除注明转载外,均为本站原创或编译欢迎任何形式的转载,但请务必注明出处,尊重他人劳动,同学习共成长。转载请注明:文章转载自:罗索实验室 [http://www.rosoo.net/a/202005/17663.html]
本文出处:博客园 作者:StarZhai 原文
顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------
相关文章
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 验证码:点击我更换图片
栏目列表
将本文分享到微信
织梦二维码生成器
推荐内容