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