失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > Python-OpenCV 处理图像(六):对象识别

Python-OpenCV 处理图像(六):对象识别

时间:2023-07-12 16:12:14

相关推荐

Python-OpenCV 处理图像(六):对象识别

0x00. 特征识别

这里主要用到两个函数:

GoodFeaturesToTrackextractSURF

GoodFeaturesToTrack: 在图像中寻找具有大特征值的角点。

SURF算法: 是一个稳健的图像识别和描述算法。

总之这俩个我目前也不清楚能用来干嘛,以后用到了在更新吧。

import cv2.cv as cvimport mathim = cv.LoadImage("img/church.png", cv.CV_LOAD_IMAGE_GRAYSCALE)im2 = cv.CloneImage(im)# Goodfeatureto track algorithmeigImage = cv.CreateMat(im.height, im.width, cv.IPL_DEPTH_32F)tempImage = cv.CloneMat(eigImage)cornerCount = 500quality = 0.01minDistance = 10corners = cv.GoodFeaturesToTrack(im, eigImage, tempImage, cornerCount, quality, minDistance)radius = 3thickness = 2for (x,y) in corners:cv.Circle(im, (int(x),int(y)), radius, (255,255,255), thickness)cv.ShowImage("GoodfeaturesToTrack", im)#SURF algorithmhessthresh = 1500 # 400 500dsize = 0 # 1layers = 1 # 3 10keypoints, descriptors = cv.ExtractSURF(im2, None, cv.CreateMemStorage(), (dsize, hessthresh, 3, layers))for ((x, y), laplacian, size, dir, hessian) in keypoints:cv.Circle(im2, (int(x),int(y)), cv.Round(size/2), (255,255,255), 1)x2 = x+((size/2)*math.cos(dir))y2 = y+((size/2)*math.sin(dir))cv.Line(im2, (int(x),int(y)), (int(x2),int(y2)), (255,255,255), 1)cv.ShowImage("SURF ", im2)cv.WaitKey(0)

0x01. 人脸识别

可以使用 OpenCV 训练好的级联分类器来识别图像中的人脸,当然还有很多其他的分类器:例如表情识别,鼻子等,具体可在这里下载:

OpenCV分类器

具体使用代码:

#import library - MUST use cv2 if using opencv_traincascadeimport cv2# rectangle color and strokecolor = (0,0,255) # reverse of RGB (B,G,R) - weirdstrokeWeight = 1 # thickness of outline# set window namewindowName = "Object Detection"# load an image to search for facesimg = cv2.imread("mao.jpg")# load detection file (various files for different views and uses)cascade = cv2.CascadeClassifier("haarcascade_frontalface_alt.xml")# preprocessing, as suggested by: http://www.bytefish.de/wiki/opencv/object_detection# img_copy = cv2.resize(img, (img.shape[1]/2, img.shape[0]/2))# gray = cv2.cvtColor(img_copy, cv2.COLOR_BGR2GRAY)# gray = cv2.equalizeHist(gray)# detect objects, return as listrects = cascade.detectMultiScale(img)# display until escape key is hitwhile True:# get a list of rectanglesfor x,y, width,height in rects:cv2.rectangle(img, (x,y), (x+width, y+height), color, strokeWeight)# display!cv2.imshow(windowName, img)# escape key (ASCII 27) closes windowif cv2.waitKey(20) == 27:break# if esc key is hit, quit!exit()

效果:

如果觉得《Python-OpenCV 处理图像(六):对象识别》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。