(SVM简单的编写)
编辑器环境:VsCode , Pycharm
所需要的文件:

  1. 正样本文件件(存放正样本图片-需要train 的图片)
  2. 负样本文件夹(存放负样本的图片)
  3. 测试文件夹(测试图片的存放)


    上面的图片是从微信导入。
    训练的图片最好使用灰度后的二值化图像,更加好的效果
    将正负样本放到同一个 samples 和labels里面,使用SVM train 去训练图片。
    注意正负样本的大小需要一致。
import os
import cv2
import numpy as npdef date_load():pwd = os.getcwd()print(pwd)pos_dir = os.path.join(pwd,'positive')if os.path.exists(pos_dir):pos = os.listdir(pos_dir)neg_dir = os.path.join(pwd, 'negative')if os.path.exists(neg_dir):neg = os.listdir(neg_dir)samples = []labels = []# 处理正样品for f in pos:file_path = os.path.join(pos_dir,f)if os.path.exists(file_path):pos_img = cv2.imread(file_path)pos_img = cv2.resize(pos_img,(160,320))descriptors = np.resize(pos_img,(1, 160*320*3))samples.append(descriptors)labels.append(1.)# 处理正样品for f in neg:file_path = os.path.join(neg_dir, f)if os.path.exists(file_path):neg_img = cv2.imread(file_path)neg_img = cv2.resize(neg_img, (160, 320))descriptors = np.resize(neg_img, (1, 160*320*3))samples.append(descriptors)labels.append(-1.)samples_number = len(samples)samples = np.float32(samples)samples = np.resize(samples, (samples_number, 160*320*3))labels = np.int32(labels)labels = np.resize(labels, (samples_number, 1))return samples, labelsdef train_svm(samples, labels):svm = cv2.ml.SVM_create()svm.setKernel(cv2.ml.SVM_LINEAR)svm.setType(cv2.ml.SVM_EPS_SVR)svm.setP(0.1)criterial = (cv2.TERM_CRITERIA_MAX_ITER + cv2.TERM_CRITERIA_EPS, 5000, 1e-16)svm.setTermCriteria(criterial)svm.train(samples, cv2.ml.ROW_SAMPLE, labels)wT = svm.getSupportVectors()rho,_,_ = svm.getDecisionFunction(0)b = -rhoreturn wT, bif __name__ == '__main__':samples, labels = date_load()wT, b = train_svm(samples, labels)img_num = os.path.join(os.getcwd(), 'test')video = cv2.VideoCapture(0)while True:ret, frame = video.read()src = frame.copy()src = cv2.resize(src, (160, 320))x = np.resize(src, (160 * 320*3, 1))value = np.dot(wT, x)[0][0] + bcv2.imshow('src', src)if value > 0:cv2.putText(frame, 'BALL', (10, 55), 2, 1, (0, 255, 0), 5, cv2.LINE_AA)cv2.imshow('img', frame)cv2.waitKey(1)else:cv2.putText(frame, 'NO BALL', (10, 55), 2, 1, (0, 0, 255), 5, cv2.LINE_AA)cv2.imshow('img', frame)cv2.waitKey(1)if cv2.waitKey(1) == 'q':break# for i in range(12):#     img = cv2.imread('test/' + str(i) + '.jpeg')#     img = cv2.resize(img, (160, 320))#     x = np.resize(img, (160 * 320*3, 1))#     value = np.dot(wT, x)[0][0] + b#     print(value)#     if value > 0:#         cv2.putText(img, 'GOOD', (10, 55), 2, 1, (0, 255, 0), 5, cv2.LINE_AA)#         cv2.imshow('img', img)##         cv2.waitKey(0)#     else:#         cv2.putText(img, 'BAD', (10, 55), 2, 1, (0, 0, 255), 5, cv2.LINE_AA)#         cv2.imshow('img', img)#         cv2.waitKey(0)

将读取摄像头的片段注释打开下面的图片读取就可以实现图片的读取测试

   for i in range(12):img = cv2.imread('test/' + str(i) + '.jpeg')img = cv2.resize(img, (160, 320))x = np.resize(img, (160 * 320*3, 1))value = np.dot(wT, x)[0][0] + bprint(value)if value > 0:cv2.putText(img, 'GOOD', (10, 55), 2, 1, (0, 255, 0), 5, cv2.LINE_AA)cv2.imshow('img', img)cv2.waitKey(0)else:cv2.putText(img, 'BAD', (10, 55), 2, 1, (0, 0, 255), 5, cv2.LINE_AA)cv2.imshow('img', img)cv2.waitKey(0)

其中:
更改下列的 5000 大小就可以更改后面测试样本的逼近超平面的测试逼近值

    criterial = (cv2.TERM_CRITERIA_MAX_ITER + cv2.TERM_CRITERIA_EPS, 5000, 1e-16)


train_svm()函数为使用 SVM 分类器读取类和标记值。将输出的结果打印在图片上
本程序只针对整张图片的识别检测,在此基础上可以扩展成为具体的物体识别检测。

python(opencv) SVM 测试使用相关推荐

  1. Python+OpenCV:基于SVM手写数据OCR(OCR of Hand-written Data using SVM)

    Python+OpenCV:基于SVM手写数据OCR(OCR of Hand-written Data using SVM) dsize = 20 affine_flags = lmc_cv.WARP ...

  2. Python+OpenCV:理解支持向量机(SVM)

    Python+OpenCV:理解支持向量机(SVM) 理论 线性可分数据(Linearly Separable Data) Consider the image below which has two ...

  3. win10 打开 Intel Realsense R200获取深度和彩色视频流 ,并测试python opencv 获取

    一:win10打开 Intel Realsense  R200 1.python 需3.6或以上,我的是3.7 2.去官网下载https://github.com/IntelRealSense/lib ...

  4. Python OpenCV开发MR智能人脸识别打卡系统(五、程序入口设计与测试)

    需要源码请点赞关注收藏后评论区留言私信~~~ 整体系统讲解如下 Python OpenCV开发MR智能人脸识别打卡系统(一.需求分析与系统设计) Python OpenCV开发MR智能人脸识别打卡系统 ...

  5. 使用Python+OpenCV+dlib为人脸生成口罩

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达推荐阅读 42个pycharm使用技巧,瞬间从黑铁变王者Google ...

  6. 【Python+OpenCV+sklearn+easygui】人脸(口罩)识别+口罩下人脸补全的系统设计

    [写在前面:笔者是一个才接触python半年之久的编程菜鸡,刚好这学期的课程需要用到python做一些有关计算机视觉的设计,于是就根据自己所学,同时借鉴了一些CSDN上各位大佬的思路和代码,做了一个简 ...

  7. Python OpenCV实战应用

    OpenCV实战应用 摘要 传统计算机视觉 传统特征提取方法 SIFT(尺度不变特征变换) HOG方向梯度特征图 SIFT和HOG的比较 LBP 建筑物轮廓提取 介绍 代码 API说明 车道线检测 介 ...

  8. 面部表情识别java_使用Python+OpenCV+dlib为人脸生成口罩

    来源:深度学习与计算机视觉 本文约4800字,建议阅读6分钟本文试图用OpenCV和dlib库来实现这个过程,在这里我们综合生成5种类型的口罩来绘制人脸图像. 本文使用OpenCV dlib库生成口罩 ...

  9. 使用Python,OpenCV在视频中进行实时条形码检测

    使用Python,OpenCV在视频中进行实时条形码检测 1. 步骤 2. 适用场景及优化 3. 总结 4. 源码 参考 上一篇博客介绍了如何检测和查找图像中的条形码.这篇博客将进行一些优化以检测实时 ...

最新文章

  1. 比尔·盖茨官宣离婚!除了孩子和基金会,一切都是浮云
  2. yum安装docker(阿里镜像源)及docker-compose二进制安装
  3. java调用matlab绘图
  4. Java中的LinkedHashMap
  5. 前端学习(2329):angular之路由
  6. docker安装rabbitmq延时队列插件
  7. MySQL学习-子查询及limit分页
  8. 小甲鱼python第六讲_小甲鱼Python第十七讲课后习题(示例代码)
  9. 警惕新型“二进制植入”漏洞,立即更新至 Npm 最新版本
  10. 世上哪有那么多的怀才不遇
  11. android 静默暗转_Android PackageInstaller 静默安装的实现
  12. 如何用python编写财务记账软件_python实现日常记账本小程序
  13. 做个合格的吃货~利用Python爬取美食网站3032个菜谱并分析
  14. OpenStack必备基础知识
  15. Panoramic Photography
  16. 登录页面,登录后跳转不成功
  17. ip中继对接_FreePBX配置IP对接中继
  18. Hive报错:Execution Error, return code 2 from org.apache.hadoop.hive.ql.exec.mr.MapRedTask MapReduce
  19. DELL电脑开机自检提示please run setup program
  20. kylin v10系统_银河麒麟桌面操作系统V10

热门文章

  1. 谭浩强c语言不讲位运算呢,谭浩强C语言教程第十二章-位运算.doc
  2. 字体图标之Symbol用法
  3. matlab 显示高光谱,高光谱图像显示问题
  4. C++模拟OpenGL库——图片处理及纹理系统(四):UV纹理坐标
  5. ES Module和CommonJS的区别
  6. 大数据开发复习Spark篇
  7. JavaScript处理json数据(对象,数组,集合)
  8. userdel: user * is currently used by process 1278
  9. Python实现仿射密码
  10. Lists.newArrayList