• 基于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~

  • 相关阅读:
    南京航空航天大学软件著作权申请办法
    CoDel Test Script
    [编辑中] 免费的Internet流量发生器 | Free Internet Traffic Generators
    关于Java LDAP登录集成
    sonar + ieda实现提交代码前代码校验
    sonar+Jenkins代码覆盖率检测
    定义自己的代码风格CheckStyle简单使用
    HAProxy简单使用
    读取大文件性能测试
    使用HtmlUnit登录百度
  • 原文地址:https://www.cnblogs.com/uestc-mm/p/10527717.html
Copyright © 2020-2023  润新知