zoukankan      html  css  js  c++  java
  • 基于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~

  • 相关阅读:
    UVa532 Dungeon Master 三维迷宫
    6.4.2 走迷宫
    UVA 439 Knight Moves
    UVa784 Maze Exploration
    UVa657 The die is cast
    UVa572 Oil Deposits DFS求连通块
    UVa10562 Undraw the Trees
    UVa839 Not so Mobile
    327
    UVa699 The Falling Leaves
  • 原文地址:https://www.cnblogs.com/uestc-mm/p/10527717.html
Copyright © 2011-2022 走看看