文章目录
- 背景
- 代码
背景
由于我们在做项目的时候可能会涉及到某个指定区域进行目标检测或者人脸识别等任务,所以这篇博客是为了探究如何在传统目标检测的基础上来结合特定区域进行检测,以Opencv自带的包为例。
代码
import cv2
face_cascade = cv2.CascadeClassifier(cv2.data.haarcascades + 'haarcascade_frontalface_default.xml')
cap = cv2.VideoCapture(0)
# 定义感兴趣区域的坐标和大小
roi_x = 200
roi_y = 100
roi_width = 300
roi_height = 300
while True:
# 读取一帧图像
ret, frame = cap.read()
if not ret:
print("无法读取摄像头图像")
break
# 获取感兴趣区域
roi = frame[roi_y:roi_y+roi_height, roi_x:roi_x+roi_width]
# 将感兴趣区域转换为灰度图像
gray = cv2.cvtColor(roi, cv2.COLOR_BGR2GRAY)
# 使用人脸检测器检测人脸区域
faces = face_cascade.detectMultiScale(gray, scaleFactor=1.1, minNeighbors=5, minSize=(30, 30))
# 在原始图像上绘制感兴趣区域矩形
cv2.rectangle(frame, (roi_x, roi_y), (roi_x+roi_width, roi_y+roi_height), (255, 0, 0), 2)
# 在感兴趣区域上绘制人脸区域矩形
for (x, y, w, h) in faces:
cv2.rectangle(roi, (x, y), (x+w, y+h), (0, 255, 0), 2)
# 在窗口中显示图像
cv2.imshow("Camera", frame)
if cv2.waitKey(1) == 27:
break
cap.release()
cv2.destroyAllWindows()