pythonopencv基础使用总结
- 开源代码
- 2025-09-07 05:18:02

1.安装opencv库:pip install opencv-python
2.基础使用范例
import cv2 #图片的基本操作# ''' 1.读取一张图片 参数 1:图片的文件名 如果图片放在当前文件夹下,直接写文件名就行,如'lena.jpg' 否则需要给出绝对路径,如'D:\OpenCVSamples\lena.jpg' 参数 2:读入方式,省略即采用默认值 cv2.IMREAD_COLOR:彩色图,默认值(1) cv2.IMREAD_GRAYSCALE:灰度图(0) cv2.IMREAD_UNCHANGED:包含透明通道的彩色图(-1) ''' img = cv2.imread("D:/a.png") #颜色转换为灰度图 img_gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY) #先定义窗口 #cv2.namedWindow('face', cv2.WINDOW_NORMAL) # 2.显示图片 cv2.imshow('img', img) cv2.imshow('gray',img_gray) cv2.waitKey(0) #获取图片属性 print(img.size) print(img.shape) #获取脸部ROI # face=img[89:92,180:157] # cv2.imshow('gg',face) # cv2.waitKey(0) #通道分隔与合并 # b,g,r= cv2.split(img) # img=cv2.merge(b,g,r) #b = img[:,0] #cv2.imshow('blue',b) #cv2.waitKey(0) # 3.保存图片 #cv2.imwrite("D:/face.png", b) print('save img success!') import cv2 #打开摄像头# #1.打开摄像头,并灰度显示 capture=cv2.VideoCapture(0) # 获取捕获的分辨率 width, height = capture.get(3), capture.get(3) #capture.get():获取本地视频属性 print("width,height为:", width, height) # 以原分辨率的一倍来捕获 capture.set(cv2.CAP_PROP_FRAME_WIDTH, width * 2) #capture.set():设置本地视频属性 capture.set(cv2.CAP_PROP_FRAME_HEIGHT, width * 2) while(True): #获取一帧 ret,frame = capture.read() #将这帧转换为灰度图 gray =cv2.cvtColor(frame,cv2.COLOR_BGR2GRAY) cv2.imshow('frame',gray) if cv2.waitKey(30) == ord('q'): break # 3.保存图片 cv2.imwrite("D:/its.png", gray) print('save img success!') import cv2 #播放本地视频 #播放本地视频 capture = cv2.VideoCapture('D:/名校励志演讲21.2012 巴纳德学院 奥巴马 .mp4') while(capture.isOpened()): ret,frame = capture.read() gray= cv2.cvtColor(frame,cv2.COLOR_BGR2GRAY) cv2.imshow('frame',gray) if(cv2.waitKey(30) == ord('q')): break # 3.保存图片 cv2.imwrite("D:/obama.png", gray) print('save img success!') import cv2 #录制视频# capture = cv2.VideoCapture(0) #定义编码方式并创建VideoWriter对象 fourcc=cv2.VideoWriter_fourcc(*'MJPG') #定义编码方式Fourcc outfile=cv2.VideoWriter('D:/obama.avi',fourcc,25.,(640,480)) #25:帧率 (640,480):分辨率 while(capture.isOpened()): ret,frame = capture.read() if ret: outfile.write(frame) #写入文件 cv2.imshow('frame',frame) if(cv2.waitKey(1) == ord('q')): break else: break print('save success!') import cv2 #图像几何变换:旋转、平移、缩放和翻转图片# img= cv2.imread('D:/a.png') #按照指定的宽度,高度缩放图片 #res=cv2.resize(img,190,189) #按照比例缩放,如:x,y轴均放大一倍 res2= cv2.resize(img,None,fx=2,fy=2,interpolation=cv2.INTER_LINEAR) #翻转图片:第二个参数(等于0,垂直翻转;大于0,水平翻转;小于0,水平垂直翻转) dst=cv2.flip(res2,-1) #获取行列 rows, cols = img.shape[:2] #旋转图片,缩小一半 M=cv2.getRotationMatrix2D((cols/2,rows/2),45,0.5) wp=cv2.warpAffine(dst,M,(cols,rows)) #平移/旋转,靠仿射变换cv2.warpAffine()实现的 #cv2.imshow('shrink',res) # cv2.imshow('zoom',dst) cv2.imshow('rotation',wp) cv2.waitKey(0) # 3.保存图片 cv2.imwrite("D:/face.png",dst) print('save img success!') import cv2 import numpy as np #绘图 cv2.line(), cv2.circle(), cv2.rectangle(), cv2.ellipse(), cv2.putText()# #画线# #创建黑色图片 img =np.zeros((512,512,3),np.uint8) #画一条线 cv2.line(img,(0, 0), (512, 512), (255, 0, 0), 5) #画矩形 cv2.rectangle(img,(384, 0), (510, 128), (0, 255, 0), 3) #画圆 cv2.circle(img,(447, 63), 63, (0, 0, 255), -1) #画椭圆 cv2.ellipse(img,(256, 256), (100, 50), 0, 0, 180, (255, 0, 0), -1) #多边形 # 定义四个顶点坐标 pts = np.array([[10, 5], [50, 10], [70, 20], [20, 30]], np.int32) # 顶点个数:4,矩阵变成 4*1*2 维 pts = pts.reshape((-1, 1, 2)) cv2.polylines(img, [pts], True, (0, 255, 255)) # 使用 cv2.polylines() 画多条直线 line1 = np.array([[100, 20], [300, 20]], np.int32).reshape((-1, 1, 2)) line2 = np.array([[100, 60], [300, 60]], np.int32).reshape((-1, 1, 2)) line3 = np.array([[100, 100], [300, 100]], np.int32).reshape((-1, 1, 2)) cv2.polylines(img,[line1, line2, line3], True, (0, 255, 255)) #添加文字 font =cv2.FONT_HERSHEY_COMPLEX cv2.putText(img,'China!!',(10,500),font,4, (255, 255, 255), 2, lineType=cv2.LINE_AA) cv2.imshow('paint',img) cv2.waitKey(0)3.人脸检测实现 首先在opencv官网下载opencv pc版的安装包 Releases - OpenCV
其次,安装下载包,找到人脸检测的xml文件,如下:
注意:这些xml文件,可用于检测静止图像、视频和摄像所得到图像中的人脸
人脸检测特征数据文件
代码实现
import cv2 def fac_detect_demo(img): #将图片转换为灰度图片 gray=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY) #加载特征数据 face_detector=cv2.CascadeClassifier('D:/opencv/sources/data/haarcascades/haarcascade_frontalface_default.xml') faces=face_detector.detectMultiScale(gray) # x,y为起始坐标,w,h为宽高 for x,y,w,h in faces: # (x,y),(x+w,y+h)分别为左上角,右下角,矩形颜色为(0,255,0)即绿色;thickness=2为矩形的边框 cv2.rectangle(img,(x,y),(x+w,y+h),color=(0,255,0),thickness=2) cv2.imshow('reuslt:',img) #人脸检测-图片单张人脸 #1.加载图片 img = cv2.imread("D:/aa.png") #2.人脸检测 fac_detect_demo(img) cv2.waitKey(0) cv2.destroyAllWindows() #释放内存空间效果如下:
import cv2 def fac_detect_demo(img): #将图片转换为灰度图片 gray=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY) #加载特征数据 face_detector=cv2.CascadeClassifier('D:/opencv/sources/data/haarcascades/haarcascade_frontalface_default.xml') faces=face_detector.detectMultiScale(gray,scaleFactor=1.1,minNeighbors=3,maxSize=(50,50)) #进行人脸检测 # x,y为起始坐标,w,h为宽高 for x,y,w,h in faces: print(x,y,w,h) # (x,y),(x+w,y+h)分别为左上角,右下角,矩形颜色为(0,0,255)即红色;thickness=2为矩形的边框 cv2.rectangle(img,(x,y),(x+w,y+h),color=(0,0,255),thickness=2) cv2.circle(img,center=(x+w//2,y+h//2),radius=w//2,color=(0,255,0),thickness=2) cv2.imshow('reuslt:',img) #人脸检测-图片多张脸 #1.加载图片 img = cv2.imread("D:/aaa.png") #2.调用人脸检测方法 fac_detect_demo(img) cv2.waitKey(0) cv2.destroyAllWindows() #释放内存空间效果如下:
人脸检测-视频中人脸识别 import cv2 def face_detect_demo(img): # 将图片转换为灰度图片 gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # 加载特征数据 face_detector = cv2.CascadeClassifier('D:/opencv/sources/data/haarcascades/haarcascade_frontalface_default.xml') faces = face_detector.detectMultiScale(gray,maxSize=(210,210),minSize=(120,120)) # 进行人脸检测 # x,y为起始坐标,w,h为宽高 for x, y, w, h in faces: print(x, y, w, h) # (x,y),(x+w,y+h)分别为左上角,右下角,矩形颜色为(0,0,255)即红色;thickness=2为矩形的边框 cv2.rectangle(img, (x, y), (x + w, y + h), color=(0, 0, 255), thickness=2) cv2.circle(img, center=(x + w // 2, y + h // 2), radius=w // 2, color=(0, 255, 0), thickness=2) cv2.imshow('reuslt:', img) #人脸检测-视频中人脸识别 #读取视频 cap= cv2.VideoCapture('D:/名校励志演讲21.2012 巴纳德学院 奥巴马 .mp4') while True: flag,frame= cap.read() if not flag: #读到视频结尾,break break face_detect_demo(frame) if ord('q')==cv2.waitKey(10): break cv2.destroyAllWindows() cap.release()效果如下:
训练人脸数据
import os import cv2 import numpy as np from PIL import Image #训练数据 def getImageAndLabels(path): facesSamples=[] ids=[] imagePaths=[os.path.join(path,f) for f in os.listdir(path)] #检测人脸 face_detector = cv2.CascadeClassifier('D:/opencv/sources/data/haarcascades/haarcascade_frontalface_default.xml') #遍历列表中的图片 for imagePath in imagePaths: #打开图片 PIL_img=Image.open(imagePath).convert('L') #将图像转换为数组 img_numpy=np.array(PIL_img,'uint8') faces = face_detector.detectMultiScale(img_numpy) #获取人脸 #获取每张图片的id # print(os.path.split(imagePath)) id=int(os.path.split(imagePath)[1].split('.')[0]) for x, y, w, h in faces: facesSamples.append(img_numpy[y:y+h,x:x+w]) ids.append(id) return facesSamples,ids if __name__=='__main__': #1.图片路径 path='./data/img/' #2.获取图像数组和id标签数组 faces,ids=getImageAndLabels(path) #3.获取训练对象 recognizer = cv2.face.LBPHFaceRecognizer_create() recognizer.train(faces,np.array(ids)) #4.保存训练数据到文件 recognizer.write('trainer/trainer.yml')人脸识别
import cv2.face #人脸识别# #加载训练的数据文件 recognizer=cv2.face.LBPHFaceRecognizer_create() recognizer.read('trainer/trainer.yml') #准备识别的图片 img=cv2.imread('D:/obama.png') #对图片进行灰度 gray=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY) # 加载特征数据 face_detector = cv2.CascadeClassifier('D:/opencv/sources/data/haarcascades/haarcascade_frontalface_default.xml') faces = face_detector.detectMultiScale(gray) # 进行人脸检测 # x,y为起始坐标,w,h为宽高 for x, y, w, h in faces: # print(x, y, w, h) # (x,y),(x+w,y+h)分别为左上角,右下角,矩形颜色为(0,255,0)即绿色;thickness=2为矩形的边框 cv2.rectangle(img, (x, y), (x + w, y + h), color=(0,255,0), thickness=2) #人脸识别 id,confidence=recognizer.predict(gray[y:y+h,x:x+w]) print("标签id:",id,"置信评分:",confidence) cv2.imshow('reuslt:', img) cv2.waitKey(0) cv2.destroyAllWindows()pythonopencv基础使用总结由讯客互联开源代码栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“pythonopencv基础使用总结”
下一篇
Java小白入门基础知识(二)