基于Python & Opencv 图像处理算法

Posted 小淼博客

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了基于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~

以上是关于基于Python & Opencv 图像处理算法的主要内容,如果未能解决你的问题,请参考以下文章

OpenCV&&python_图像平滑(Smoothing Images)

基于qml创建最简单的图像处理程序-使用opencv&qml进行图像处理

Python/OpenCV - 基于机器学习的 OCR(图像到文本)

基于python的OpenCV图像1

作者简介&系列文章

基于qml创建最简单的图像处理程序-使用opencv&qml进行图像处理