随着本专栏的学习,你可以快速的掌握如何使用Opencv,请注意更多的学习内容还请看官方文档,本专栏是为了给对于视觉方向比较感兴趣的新手所写,带领它们做好一个基础的框架,让他们快速学会如何通过这个框架调取函数做自己感兴趣的项目,同时我也正在更新我的Opencv项目实战专栏,你可以搭配着一起学习。
订阅此专栏, (2条消息) Opencv项目实战_夏天是冰红茶的博客-CSDN博客
人脸识别
我们先来看看它的效果:
成功检测到人脸,如果你看过我前面的项目,你会非常容易地将它修改成实时地检测人脸。这里我们用到了"haarcascade_frontalface_default.xml",这是一个入门的教程,暂时不用了解它是怎么来的,它就是一个默认的人脸检测器。
import cv2
faceCascade= cv2.CascadeClassifier("Resources/haarcascade_frontalface_default.xml")
#需将文件放在同一个文件夹里
img = cv2.imread('Resources/lena.png')
imgGray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
faces = faceCascade.detectMultiScale(imgGray,1.1,4)
#比例因子1.1
for (x,y,w,h) in faces:
cv2.rectangle(img,(x,y),(x+w,y+h),(255,125,255),2)
cv2.imshow("Result", img)
cv2.waitKey(0)
CascadeClassifier,是Opencv中做人脸检测的时候的一个级联分类器,detectMultiScale用来检测到的对象将作为列表返回个矩形,再简单画框就完成了。
车牌检测
import cv2
#############################################
frameWidth = 640
frameHeight = 480
nPlateCascade = cv2.CascadeClassifier("Resources/haarcascade_russian_plate_number.xml")
minArea = 200
color = (255,0,255)
###############################################
cap = cv2.VideoCapture(0)
cap.set(3, frameWidth)
cap.set(4, frameHeight)
cap.set(10,150)
count = 0
while True:
success, img = cap.read()
imgGray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
numberPlates = nPlateCascade.detectMultiScale(imgGray, 1.1, 10)
for (x, y, w, h) in numberPlates:
area = w*h
if area >minArea:
cv2.rectangle(img, (x, y), (x + w, y + h), (255, 0, 255), 2)
cv2.putText(img,"Number Plate",(x,y-5),
cv2.FONT_HERSHEY_COMPLEX_SMALL,1,color,2)
imgRoi = img[y:y+h,x:x+w]
cv2.imshow("ROI", imgRoi)
cv2.imshow("Result", img)
if cv2.waitKey(20) & 0xFF == ord('q'):
break
if cv2.waitKey(1) & 0xFF == ord('s'):
cv2.imwrite("Resources/Scanned/NoPlate_"+str(count)+".jpg",imgRoi)
cv2.rectangle(img,(0,200),(640,300),(0,255,0),cv2.FILLED)
cv2.putText(img,"Scan Saved",(150,265),cv2.FONT_HERSHEY_DUPLEX,
2,(0,0,255),2)
cv2.imshow("Result",img)
cv2.waitKey(500)
count += 1
车牌检测与上面的人脸识别相同。当然在后面添加了保存的功能。
本次的教程就到这里了,这个系列学完后,大家可以搭配我另外一个实战的专栏学习,遇到不会的可以去查找,在遇到问题时学会新的知识。