基于Python & Opencv 图像-视频-处理算法

Alg1:图像数据格式之间相互转换.png to .jpg(其他的请举一反三)

 1 import cv2
 2 import glob
 3 
 4 def png2jpg():
 5         images = glob.glob('*.png') # 获取当前路径下的所有后缀名为.png的文件
 6         count = 0 # 不断累加,提供输出图像名称
 7         for i in images:
 8                 print('Picture %d is Processing...' % count)
 9                 I = cv2.imread(i) # 读取图像
10                 cv2.imwrite(str(count)+'.jpg',I) # 写入图像
11                 count += 1

将程序封装成脚本方便调用,将上述代码封装成.py文件,放到对应需要修改的文件夹即可完成所有图片的格式转换png2jpg.py

 Alg2:重新设置图像大小.py直接双击运行即可cv2.resize()

import cv2
import glob
images = glob.glob('*.png') # 获取当前路径下的所有后缀名为.png的文件
print(images)
zoom_coff = 0.8 # 系数,用来计算图像结果大小
for i in images:
    I = cv2.imread(i)
    w, h = I.shape[:2]
    print(w,h)
    Res = cv2.resize(I,(int(h*zoom_coff), int(w*zoom_coff)))
    cv2.imwrite(i,Res)

Alg2:读取MATLAB输出的.mat文件

from scipy.io import loadmat
path='C:\Users\miao.ma\Desktop\data\Ref\MATLAB_Calculate\calibrationSession.mat'
mat = loadmat(path)        
print(mat)

Alg3:启动设备Camera进行视频捕获&按键监测捕获照片

 1 import cv2
 2 import threading
 3 
 4 cap = cv2.VideoCapture(0)
 5 while not cap.isOpened(): # 检查摄像头是否打开成功
 6         time.sleep(100)
 7         print('Camera is Initialize...')
 8 
 9 width = int(cap.get(3)) # 读取摄像头分辨率参数
10 height = int(cap.get(4))
11 
12 frame = np.zeros((width,height,3),dtype=np.uint8) # 创建图像模板
13 
14 Key_val = 0 # 保存键值
15 process_flag = True # 任务切换
16 
17 def Keybo_Moni(): # 按键测试函数
18         count = 0
19         while True:
20                 global Key_val, frame, process_flag, cap
21                 if Key_val == ord('r'):
22                         Key_val= 0
23                         cv2.imwrite('ResPic' + str(count) + '.jpg', frame) # 保存图像
24                         count += 1
25                         print('Get new pic %d' % count)
26                 if Key_val == ord('q'):
27                         cap.release()
28                         cv2.destroyAllWindows()
29                         print('Pic Sample Finished!')
30                         process_flag = False
31                         break
32 
33 try:
34 
35         Keybo_Moni_Thread = threading.Thread(target=Keybo_Moni, name='Keyboard-Thread') # 创建键盘监控线程
36         Keybo_Moni_Thread.start() # 启动键盘监测线程
37 except:
38         print('Error:uqnable to start the thread!')
39 
40 while process_flag:
41         ret, frame = cap.read() # 读取视频帧
42         while not ret: # 确保读取到了正确的数据,若frame为空,使用imshow将会报错
43                 ret, frame = cap.read()
44                 print('Error: Camera wrong!')
45         cv2.imshow('Video_Show', frame) # 显示图像
46         Key_val = cv2.waitKey(1) # 获取键值,不加此句,无法运行程序!(Ref:https://www.cnblogs.com/kissfu/p/3608016.html)
47 
48 Keybo_Moni_Thread.join() # 在这里等待子线程结束
View Code

上述程序中,使用了多线程的方式,在按键监测和图像视频帧输出的同时,我们需要保证能够实时的监测到键盘,必须采用多线程,事实上单一线程也能完成相应的工作,但单一线程在例如算法处理等操作的时间上存在一定限制,处理时间过长将导致视频帧率的下降!所以采用多线程是个好的办法!采样和处理分开,再加上相应的缓冲就能很好的完成数据速率的匹配了.

 Alg4:人脸识别算法

import numpy as np
import cv2

face_cascade = cv2.CascadeClassifier('/usr/local/share/OpenCV/haarcascades/haarcascade_frontalface_default.xml')
cap = cv2.VideoCapture(0)
while True:
    ret,img = cap.read()
    gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
    faces = face_cascade.detectMultiScale(gray, 1.3, 5)
    for (x,y,w,h) in faces:
        cv2.rectangle(img,(x,y),(x+w,y+h),(255,0,0),2)
    cv2.imshow('img',img)       
    if cv2.waitKey(1) &0xFF == ord('q'):
        break
cap.release()
cv2.destroyAllWindows()

原理介绍:

Keep Going~

原文地址:https://www.cnblogs.com/uestc-mm/p/10527717.html