2023-11-21 20:25:20 [显示全部楼层]
993浏览
查看: 993|回复: 0

[教程] 【行空板】 关于openCV的十个应用

[复制链接]
本帖最后由 Vico 于 2023-11-22 17:32 编辑

当我手上拿到行空板之后,我感觉这个应用实在太过于广泛,其中openCV可以做很多视觉相关的应用。限于篇幅,在这里列举出10种常用的应用:

1.实时人脸检测: 使用OpenCV进行实时人脸检测。代码会启动摄像头,使用Haar级联分类器来检测和框选脸部
  1. import cv2
  2. face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')
  3. cap = cv2.VideoCapture(0)
  4. while True:
  5.     _, img = cap.read()
  6.     gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
  7.     faces = face_cascade.detectMultiScale(gray, 1.1, 4)
  8.     for (x, y, w, h) in faces:
  9.         cv2.rectangle(img, (x, y), (x+w, y+h), (255, 0, 0), 2)
  10.     cv2.imshow('img', img)
  11.     if cv2.waitKey(1) & 0xFF == ord('q'):
  12.         break
  13. cap.release()
  14. cv2.destroyAllWindows()
复制代码

2.运动检测: 检测和记录视频中的运动。可以用于安全监控系统。
  1. import cv2
  2. cap = cv2.VideoCapture(0)
  3. ret, frame1 = cap.read()
  4. ret, frame2 = cap.read()
  5. while cap.isOpened():
  6.     diff = cv2.absdiff(frame1, frame2)
  7.     gray = cv2.cvtColor(diff, cv2.COLOR_BGR2GRAY)
  8.     blur = cv2.GaussianBlur(gray, (5,5), 0)
  9.     _, thresh = cv2.threshold(blur, 20, 255, cv2.THRESH_BINARY)
  10.     dilated = cv2.dilate(thresh, None, iterations=3)
  11.     contours, _ = cv2.findContours(dilated, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
  12.     for contour in contours:
  13.         (x, y, w, h) = cv2.boundingRect(contour)
  14.         if cv2.contourArea(contour) < 900:
  15.             continue
  16.         cv2.rectangle(frame1, (x, y), (x+w, y+h), (0, 255, 0), 2)
  17.         cv2.putText(frame1, "Status: {}".format('Movement'), (10,20), cv2.FONT_HERSHEY_SIMPLEX,
  18.                     1, (0, 0, 255), 3)
  19.     cv2.imshow("feed", frame1)
  20.     frame1 = frame2
  21.     ret, frame2 = cap.read()
  22.     if cv2.waitKey(40) == 27:
  23.         break
  24. cv2.destroyAllWindows()
  25. cap.release()
复制代码

3.条形码和二维码读取: 使用摄像头扫描并识别条形码和二维码。
  1. import cv2
  2. import pyzbar.pyzbar as pyzbar
  3. cap = cv2.VideoCapture(0)
  4. while True:
  5.     _, frame = cap.read()
  6.     decodedObjects = pyzbar.decode(frame)
  7.     for obj in decodedObjects:
  8.         cv2.putText(frame, str(obj.data), (50, 50), cv2.FONT_HERSHEY_SIMPLEX,
  9.                     2, (255, 0, 0), 3)
  10.     cv2.imshow("Frame", frame)
  11.     key = cv2.waitKey(1)
  12.     if key == 27:
  13.         break
  14. cap.release()
  15. cv2.destroyAllWindows()
复制代码

4.颜色跟踪: 检测并跟踪视频中特定颜色的物体。
  1. import cv2
  2. import numpy as np
  3. cap = cv2.VideoCapture(0)
  4. while True:
  5.     _, frame = cap.read()
  6.     hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)
  7.     lower_red = np.array([30,150,50])
  8.     upper_red = np.array([255,255,180])
  9.     mask = cv2.inRange(hsv, lower_red, upper_red)
  10.     res = cv2.bitwise_and(frame,frame, mask= mask)
  11.     cv2.imshow('frame',frame)
  12.     cv2.imshow('mask',mask)
  13.     cv2.imshow('res',res)
  14.     if cv2.waitKey(1) & 0xFF == ord('q'):
  15.         break
  16. cap.release()
  17. cv2.destroyAllWindows()
复制代码

5.手势识别: 通过摄像头
  1. import cv2
  2. import numpy as np
  3. cap = cv2.VideoCapture(0)
  4. while True:
  5.     ret, frame = cap.read()
  6.     # 转换为灰度图像
  7.     gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
  8.     # 应用阈值化来突出手势
  9.     _, thresh = cv2.threshold(gray, 127, 255, cv2.THRESH_BINARY_INV + cv2.THRESH_OTSU)
  10.     # 查找轮廓并绘制
  11.     contours, _ = cv2.findContours(thresh, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
  12.     for contour in contours:
  13.         if cv2.contourArea(contour) > 1000:
  14.             x, y, w, h = cv2.boundingRect(contour)
  15.             cv2.rectangle(frame, (x, y), (x+w, y+h), (0, 255, 0), 2)
  16.     cv2.imshow('Gesture', frame)
  17.     if cv2.waitKey(1) & 0xFF == ord('q'):
  18.         break
  19. cap.release()
  20. cv2.destroyAllWindows()
复制代码

6.虚拟化妆: 检测面部特征并在脸部应用虚拟化妆。
  1. import cv2
  2. import dlib
  3. # 加载面部特征检测器
  4. detector = dlib.get_frontal_face_detector()
  5. predictor = dlib.shape_predictor('shape_predictor_68_face_landmarks.dat')
  6. cap = cv2.VideoCapture(0)
  7. while True:
  8.     _, frame = cap.read()
  9.     gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
  10.     faces = detector(gray)
  11.     for face in faces:
  12.         landmarks = predictor(gray, face)
  13.         # 用landmarks定位眼睛、嘴巴等,然后在上面绘制化妆效果
  14.         # 示例:绘制眼线
  15.         cv2.line(frame, (landmarks.part(36).x, landmarks.part(36).y),
  16.                  (landmarks.part(39).x, landmarks.part(39).y), (0, 0, 255), 2)
  17.     cv2.imshow("Frame", frame)
  18.     if cv2.waitKey(1) & 0xFF == ord('q'):
  19.         break
  20. cap.release()
  21. cv2.destroyAllWindows()
复制代码

7.车牌识别: 用于识别视频中的车牌号码。
  1. # 这需要复杂的逻辑和可能涉及机器学习模型,以下是简化的概览
  2. import cv2
  3. # 载入预训练的车牌识别模型
  4. plate_cascade = cv2.CascadeClassifier('haarcascade_russian_plate_number.xml')
  5. cap = cv2.VideoCapture(0)
  6. while True:
  7.     _, img = cap.read()
  8.     gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
  9.     plates = plate_cascade.detectMultiScale(gray, 1.1, 3)
  10.     for (x, y, w, h) in plates:
  11.         cv2.rectangle(img, (x, y), (x+w, y+h), (255, 0, 0), 2)
  12.     cv2.imshow('img', img)
  13.     if cv2.waitKey(1) & 0xFF == ord('q'):
  14.         break
  15. cap.release()
  16. cv2.destroyAllWindows()
复制代码

8.虚拟试衣: 使用摄像头捕捉用户形象并实时试穿不同的服装。以下编程使用了一个静态的图像(如T恤)作为虚拟服装,并简化地假设用户位于摄像头正前方的固定位置。
  1. <blockquote>import cv2
复制代码

9.实现眼动跟踪,可用于用户界面控制或者行为研究。
  1. import cv2
  2. import dlib
  3. # 加载面部特征检测器
  4. detector = dlib.get_frontal_face_detector()
  5. predictor = dlib.shape_predictor('shape_predictor_68_face_landmarks.dat')
  6. cap = cv2.VideoCapture(0)
  7. while True:
  8.     _, frame = cap.read()
  9.     gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
  10.     faces = detector(gray)
  11.     for face in faces:
  12.         landmarks = predictor(gray, face)
  13.         left_eye = landmarks.part(36), landmarks.part(37), landmarks.part(38), landmarks.part(39), landmarks.part(40), landmarks.part(41)
  14.         right_eye = landmarks.part(42), landmarks.part(43), landmarks.part(44), landmarks.part(45), landmarks.part(46), landmarks.part(47)
  15.         # 绘制眼部轮廓
  16.         for n in left_eye + right_eye:
  17.             cv2.circle(frame, (n.x, n.y), 2, (255, 0, 0), -1)
  18.     cv2.imshow("Eye Tracking", frame)
  19.     if cv2.waitKey(1) & 0xFF == ord('q'):
  20.         break
  21. cap.release()
  22. cv2.destroyAllWindows()
复制代码


10.虚拟背景: 更换摄像头捕捉视频的背景,常用于视频会议或者直播。
  1. import cv2
  2. import numpy as np
  3. cap = cv2.VideoCapture(0)
  4. # 预设一个背景图片
  5. background = cv2.imread('background.jpg')
  6. while True:
  7.     _, frame = cap.read()
  8.     # 应用一些图像处理技术来分离前景和背景
  9.     # 示例代码省略
  10.     # 结合前景和新背景
  11.     combined_frame = np.where(mask, frame, background)
  12.     cv2.imshow("Virtual Background", combined_frame)
  13.     if cv2.waitKey(1) & 0xFF == ord('q'):
  14.         break
  15. cap.release()
  16. cv2.destroyAllWindows()
复制代码
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

为本项目制作心愿单
购买心愿单
心愿单 编辑
[[wsData.name]]

硬件清单

  • [[d.name]]
btnicon
我也要做!
点击进入购买页面
上海智位机器人股份有限公司 沪ICP备09038501号-4

© 2013-2024 Comsenz Inc. Powered by Discuz! X3.4 Licensed

mail