1.读图片:
img = cv2.imread('D:\\Documents\\vscodedoc\\facenetproject\\timg.jpg',0)
cv2.IMREAD_COLOR
,默认值,读入彩色图片,忽略透明度cv2.IMREAD_GRAYSCALE
,以灰度模式读取图片cv2.IMREAD_UNCHANGED
,读入彩色图片,并保持透明度信息调试过程中如出现:OpenCV(3.4.1) Error: Assertion failed (size.width>0 && size.height>0) in imshow, file /home/cc/software/opencv-3.4.1/modules/highgui/src/window.cpp, line 356
terminate called after throwing an instance of 'cv::Exception'
what(): OpenCV(3.4.1) /home/cc/software/opencv-3.4.1/modules/highgui/src/window.cpp:356: error: (-215) size.width>0 && size.height>0 in function imshow
可能是相对路径问题,改为绝对路径即可解决。
2.写图片:
cv2.imwrite('timg1.jpg',img)
3.操作像素矩阵
以灰度模式读取的图片,矩阵为2D,以彩色模式读取的图片,矩阵为3D。
如:img = cv2.imread('D:\\Documents\\vscodedoc\\facenetproject\\timg.jpg',0),print(img.shape),结果为(664, 1000)
如:img = cv2.imread('D:\\Documents\\vscodedoc\\facenetproject\\timg.jpg',1),print(img.shape),结果为(664, 1000,3)
3D矩阵如下:[[[248 238 231] [248 238 231] [248 238 231] ... [242 228 216] [243 229 217] [243 229 217]]...
3维数值分别表示BGR值
4.摄像头捕获实时视频流并识别人脸
import cv2
# 创建一个窗口
cv2.namedWindow('mycap')
# 获取摄像头
cap=cv2.VideoCapture(0)
# 加载分类器,分类器位置可以自行更改,注意用绝对路径,否则出错
classfier=cv2.CascadeClassifier('D:\\Documents\\vscodedoc\\facenetproject\\haarcascade_frontalface_alt2.xml')
#人脸框的颜色,采用rgb模型,这里表示g取255,为绿色框
color=(0,255,0)
while cap.isOpened():
# ok表示摄像头读取状态,frame表示摄像头读取的图像
ok,img=cap.read()
if not ok :
break
# 灰度化在后面检测时可以降低计算量
gray=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
# 利用分类器检测灰度图像中的人脸矩阵数,1.2和3分别为图片缩放比例和需要检测的有效点数
faceRects=classfier.detectMultiScale(gray,scaleFactor=1.2,minNeighbors=3,minSize=(32,32))
#大于0则检测到人脸
if len(faceRects) > 0:
# 可能检测到多个人脸,用for循环单独框出每一张人脸
for faceRect in faceRects:
#获取框的左上的坐标,框的长宽
x,y,w,h=faceRect
# cv2.rectangle()完成画框的工作,这里外扩了10个像素以框出比人脸稍大一点的区域,从而得到相对完整一点的人脸图像;cv2.rectangle()函数的最后两个参数一个用于指定矩形边框的颜色,一个用于指定矩形边框线条的粗细程度。
cv2.rectangle(img,(x-10,y-10),(x+w-10,y+h-10),color,2)
# 将图像矩阵显示在一个窗口中
cv2.imshow('mycap',img)
# 等待10ms,10ms内没有按键操作就进入下一次while循环,从而得到10ms一帧的效果,waitKey返回在键盘上按的键
c=cv2.waitKey(10)
# 按键esc后break
if c & 0xFF==27:
break
# 释放资源
cap.release()
cv2.destroyWindow('mycap')