Python-OpenCV 处理图像(六):对象识别
admin
2023-07-31 01:52:59
0

0x00. 特征识别

这里主要用到两个函数:

GoodFeaturesToTrackextractSURF

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

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

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

import cv2.cv as cv
import math

im = cv.LoadImage(\"img/church.png\", cv.CV_LOAD_IMAGE_GRAYSCALE)
im2 = cv.CloneImage(im)

# Goodfeatureto track algorithm
eigImage = cv.CreateMat(im.height, im.width, cv.IPL_DEPTH_32F)
tempImage = cv.CloneMat(eigImage)
cornerCount = 500
quality = 0.01
minDistance = 10

corners = cv.GoodFeaturesToTrack(im, eigImage, tempImage, cornerCount, quality, minDistance)

radius = 3
thickness = 2

for (x,y) in corners:
    cv.Circle(im, (int(x),int(y)), radius, (255,255,255), thickness)

cv.ShowImage(\"GoodfeaturesToTrack\", im)

#SURF algorithm
hessthresh = 1500 # 400 500
dsize = 0 # 1
layers = 1 # 3 10

keypoints, 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_traincascade
import cv2

# rectangle color and stroke
color = (0,0,255)       # reverse of RGB (B,G,R) - weird
strokeWeight = 1        # thickness of outline

# set window name
windowName = \"Object Detection\"

# load an image to search for faces
img = 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 list
rects = cascade.detectMultiScale(img)

# display until escape key is hit
while True:

    # get a list of rectangles
    for 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 window
    if cv2.waitKey(20) == 27:
        break

# if esc key is hit, quit!
exit()

效果:

相关内容

热门资讯

Mobi、epub格式电子书如... 在wps里全局设置里有一个文件关联,打开,勾选电子书文件选项就可以了。
定时清理删除C:\Progra... C:\Program Files (x86)下面很多scoped_dir开头的文件夹 写个批处理 定...
scoped_dir32_70... 一台虚拟机C盘总是莫名奇妙的空间用完,导致很多软件没法再运行。经过仔细检查发现是C:\Program...
500 行 Python 代码... 语法分析器描述了一个句子的语法结构,用来帮助其他的应用进行推理。自然语言引入了很多意外的歧义,以我们...
小程序支付时提示:appid和... [Q]小程序支付时提示:appid和mch_id不匹配 [A]小程序和微信支付没有进行关联,访问“小...
pycparser 是一个用... `pycparser` 是一个用 Python 编写的 C 语言解析器。它可以用来解析 C 代码并构...
微信小程序使用slider实现... 众所周知哈,微信小程序里面的音频播放是没有进度条的,但最近有个项目呢,客户要求音频要有进度条控制,所...
65536是2的几次方 计算2... 65536是2的16次方:65536=2⁶ 65536是256的2次方:65536=256 6553...
Apache Doris 2.... 亲爱的社区小伙伴们,我们很高兴地向大家宣布,Apache Doris 2.0.0 版本已于...
项目管理和工程管理的区别 项目管理 项目管理,顾名思义就是专注于开发和完成项目的管理,以实现目标并满足成功标准和项目要求。 工...