opencv目标检测

使用python+opecncv实现目标检测

以下是需要用到的函数,请读者在阅读代码时先行了解:
sift算法:此算法用于获取关键点和秒数符
flann匹配:用于匹配不同的描述符
词袋:bow
支持向量机:svm

import cv2 as cv
import numpy as np

def path(cls, i):
    return "%s%s%d.jpg" % (datapath, cls, i)


def extract_Sift(fn):
    image = cv.imread(fn, 0)
    return extract.compute(image, detect.detect(image))[1]

def bow_xfeatures(fn):
    image = cv.imread(fn, 0)
    return bow_extract.compute(image, detect.detect(image))

def svm_predict(fn):
    f = bow_xfeatures(fn)
    p = svm.predict(f)
    return p

datapath = "/home//feng/carimages/"
pos, neg = "pos-", "neg-"         #全部的汽车照片都是有pos-x.jpg组成的,非汽车图片都是有neg-x.jpg组成的。
detect = cv.xfeatures2d.SIFT_create()   #创建sift算法
extract = cv.xfeatures2d.SIFT_create()
indexpara = dict(algorithm=1, trees=5)
checkpara = dict(checks=50)
flann = cv.FlannBasedMatcher(indexpara, checkpara)

bow_trainer = cv.BOWKMeansTrainer(40) #定义一个40个族的词袋
bow_extract = cv.BOWImgDescriptorExtractor(extract, flann)#sift用来提取特征,flann用来匹配描述符

for i in range(1, 9):
    bow_trainer.add(extract_Sift(path(pos, i)))
    bow_trainer.add(extract_Sift(path(neg, i)))

voc = bow_trainer.cluster() #voc即是词袋的初始“词典”
bow_extract.setVocabulary(voc)

traindata, trainlabels = [], []

for i in range(1, 21):
    traindata.extend(bow_xfeatures(path(pos, i)))#为不同的训练数据定义不同标签
    trainlabels.append(1)												 
    traindata.extend(bow_xfeatures(path(neg, i)))
    trainlabels.append(-1)

svm = cv.ml.SVM_create()   #创建支持向量机并用词袋提取出来的描述符去训练支持向量机
svm.train(np.array(traindata), cv.ml.ROW_SAMPLE, np.array(trainlabels))

car = "/home/feng/carimages/carimage.jpeg"
notcar = "/home/feng/carimages/notcarimage.jpg"
carimage = cv.imread(car)
notcarimage = cv.imread(notcar)

car_predict = svm_predict(car)
notcar_predict = svm_predict(notcar)

if car_predict[1][0][0] == 1.0:
    cv.putText(carimage, "car_detected", (10, 30), cv.FONT_HERSHEY_SIMPLEX, 1, (0, 0, 255), 1, cv.LINE_AA)
if notcar_predict[1][0][0] == -1.0:
    cv.putText(notcarimage, 'car_not_detecte', (10, 30), cv.FONT_HERSHEY_SIMPLEX, 1, (0, 0, 255), 1, cv.LINE_AA)

cv.imshow("car_Detect_demo", carimage)
cv.imshow("car_detect_Demo", notcarimage)
cv.waitKey(0)
cv.destroyAllWindows()

代码的编写模仿于由乔.米尼奇诺编写的opencv3计算机视觉python实现。

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值