Opencv中ANN神经网络使用示例
前一段儿想用opencv做一下数字识别,用神经网络做识别。
在网上搜了一下关于opencv中ANN的使用方法,@小魏的修行路 的【模式识别】OpenCV中使用神经网络 CvANN_MLP 这篇文章写得挺好,照搬里面的例程运行了一下,发现有些错误,而且从他最后的结果图片来看明显是分类分错了。但是他的这篇博文还是写的挺好的,简单,通俗易懂。关于OPENCV中神经网络相关的使用方法这里就不作介绍了,大家可以直接看他的博客。
这里说一下例程的简单思路:
1.首先定义两种类型的若干个点,
2.然后利用这些样本点训练出一个模型,
3.新建一张图片,使用图片中的每一个像素作为测试点,利用上一步训练出的模型把这些像素分为两类,并用不同的颜色标记出来。
这里是程序运行的结果:
以下源码只是对 @小魏的修行路 的程序作了小部分改动:
源码
//编程环境:VS2010 + Opencv2.4.8
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/ml/ml.hpp>
#include <iostream>
#include <string> using namespace std;
using namespace cv; int main()
{ //Setup the BPNetwork CvANN_MLP bp; // Set up BPNetwork's parameters CvANN_MLP_TrainParams params; params.train_method=CvANN_MLP_TrainParams::BACKPROP; //(Back Propagation,BP)反向传播算法params.bp_dw_scale=0.1; params.bp_moment_scale=0.1; // Set up training data float labels[10][2] = {{0.9,0.1},{0.1,0.9},{0.9,0.1},{0.1,0.9},{0.9,0.1},{0.9,0.1},{0.1,0.9},{0.1,0.9},{0.9,0.1},{0.9,0.1}}; //这里对于样本标记为0.1和0.9而非0和1,主要是考虑到sigmoid函数的输出为一般为0和1之间的数,只有在输入趋近于-∞和+∞才逐渐趋近于0和1,而不可能达到。Mat labelsMat(10, 2, CV_32FC1, labels); float trainingData[10][2] = { {11,12},{111,112}, {21,22}, {211,212},{51,32}, {71,42}, {441,412},{311,312}, {41,62}, {81,52} }; Mat trainingDataMat(10, 2, CV_32FC1, trainingData); Mat layerSizes=(Mat_<int>(1,5) << 2, 2, 2, 2, 2); //5层:输入层,3层隐藏层和输出层,每层均为两个perceptronbp.create(layerSizes,CvANN_MLP::SIGMOID_SYM);//CvANN_MLP::SIGMOID_SYM ,选用sigmoid作为激励函数bp.train(trainingDataMat, labelsMat, Mat(),Mat(), params); //训练// Data for visual representation int width = 512, height = 512; Mat image = Mat::zeros(height, width, CV_8UC3); Vec3b green(0,255,0), blue (255,0,0); // Show the decision regionsfor (int i = 0; i < image.rows; ++i){for (int j = 0; j < image.cols; ++j) { Mat sampleMat = (Mat_<float>(1,2) << i,j); Mat responseMat; bp.predict(sampleMat,responseMat); float* p=responseMat.ptr<float>(0); //if (p[0] > p[1]){image.at<Vec3b>(j, i) = green; } else{image.at<Vec3b>(j, i) = blue; }} }// Show the training data int thickness = -1; int lineType = 8; circle( image, Point(111, 112), 5, Scalar( 0, 0, 0), thickness, lineType); circle( image, Point(211, 212), 5, Scalar( 0, 0, 0), thickness, lineType); circle( image, Point(441, 412), 5, Scalar( 0, 0, 0), thickness, lineType); circle( image, Point(311, 312), 5, Scalar( 0, 0, 0), thickness, lineType); circle( image, Point(11, 12), 5, Scalar(255, 255, 255), thickness, lineType); circle( image, Point(21, 22), 5, Scalar(255, 255, 255), thickness, lineType); circle( image, Point(51, 32), 5, Scalar(255, 255, 255), thickness, lineType); circle( image, Point(71, 42), 5, Scalar(255, 255, 255), thickness, lineType); circle( image, Point(41, 62), 5, Scalar(255, 255, 255), thickness, lineType); circle( image, Point(81, 52), 5, Scalar(255, 255, 255), thickness, lineType); imwrite("result.png", image); // save the image imshow("BP Simple Example", image); // show it to the user waitKey(0); return 0;
}
Opencv中ANN神经网络使用示例相关推荐
- OpenCV中的神经网络
来源:http://blog.csdn.net/delltdk/article/details/8912867 OpenCV中封装了类CvANN_MLP,因而神经网络利用很方便. 首先构建一个网络模型 ...
- OpenCV中使用神经网络 CvANN_MLP
原文:http://blog.csdn.net/xiaowei_cqu/article/details/9027617 OpenCV的ml模块实现了人工神经网络(Artificial Neural N ...
- opencv(python)使用ann神经网络识别手写数字
opencv中也提供了一种类似于Keras的神经网络,即为ann,这种神经网络的使用方法与Keras的很接近. 关于mnist数据的解析,读者可以自己从网上下载相应压缩文件,用python自己编写解析 ...
- OpenCV中神经网络的应用
OpenCV中神经网络的应用 OpenCV中也提供神经网络的算法,下面对其中的一些参数进行介绍. 激活函数 OpenCV中提供三种激活函数,分别是线性激活函数.sigmoid激活函数和高斯激活函数. ...
- OpenCV实现车牌识别,OCR分割,ANN神经网络
主要步骤: 准备车牌单个字符图像作为神经网络分类器的训练数据,越多越好.当然需要对每幅图像提取特征,这里使用的是水平和垂直累计直方图和缩小后的图像信息. 获取车牌图像,这里的车牌图像已经完成抠图,并且 ...
- Ubuntu中OpenCV的安装及使用示例
安装环境:VMware虚拟机安准的Ubuntu系统 OpenCV版本:3.4.11 一.OpenCV下载及安装 1.安装包 (1)下载OpenCV数据包 国内下载网址:https://www.bzbl ...
- OpenCV中检测ChArUco的角点(2)
论文阅读模块将分享点云处理,SLAM,三维视觉,高精地图相关的文章.公众号致力于理解三维视觉领域相关内容的干货分享,欢迎各位加入我,我们一起每天一篇文章阅读,开启分享之旅,有兴趣的可联系微信diany ...
- opencv中使用K-近邻分类算法KNN
K-近邻(K-Nearest Neighbors, KNN)是一种很好理解的分类算法,简单说来就是从训练样本中找出K个与其最相近的样本,然后看这K个样本中哪个类别的样本多,则待判定的值(或说抽样)就属 ...
- OpenCV中使用Eigenfaces 或 Fisherfaces进行人脸识别
连接:OpenCV中使用Eigenfaces 或 Fisherfaces进行人脸识别 OpenCV中使用Eigenfaces 或 Fisherfaces进行人脸识别 Translate by Dawn ...
最新文章
- CentOS 7安装gitlab服务器
- 全球及中国再生橡胶产业发展动态及十四五运营状况分析报告2021版
- iptv管理系统php制作,双子星IPTV管理系统搭建教程
- Docker安装Mysql8.0,并配置忽略大小写,一句命令搞定
- base64 能放数组里面么_手把手教你Vue解析pdf(base64)转图片【实践】
- 没解决:RuntimeWarning: tp_compare didn't return -1 or -2 for exception
- Java中String、StringBuffer、StringBuilder的区别详解
- 卡分区 shell脚本_分享一个实用脚本--一键获取linux内存、cpu、磁盘IO等信息
- 国家计算机机房地址,国家电子计算机机房设计规范..doc
- 用自己的设备跑各种VI-SLAM算法(1)——VINS/PL-VINS/ROVIO/MSCKF
- 腾讯天龙八部手游服务器账号上线,天龙八部手游服务器的注册已达到上限 服务器注册上限怎么解决...
- javascript接口鸭式辨型法实现
- python采集小说网站完整教程(附完整代码)
- java毕业设计的健身俱乐部综合管理系统mybatis+源码+调试部署+系统+数据库+lw
- nginx安装教程(centos系统)
- Unity云渲染开源框架UnityRenderStreaming使用说明
- 双线双路网络路由设置
- 工程造价课程-广联达GTJ2018功能介绍-新手看下
- 计算机模拟动物打架,动物打架模拟器
- S=x+xx+xxx+xxxx……的代码实现过程
热门文章
- FinalShell 高级版离线激活方法 已经过亲自验证
- 华为S2700 交换机配置
- 财务报表是用来排雷的-《手把手教你读财报》
- mingw64+Rust+Windows11安装
- 等保windows server安全策略三权分立设置
- 操作系统实验四——使用命名管道实现进程通信
- mint ui tabbar选中后怎么改变icon图标_微信朋友圈怎么转发 微信里面的朋友圈发的怎样再转发一次?...
- [环境配置]Win10 这台计算机中已经安装了 .NET Framework 4.5.2 或版本更高的更新
- 基于西门子S7-1500的大型焊接机全套程序,使用博图V14打开(带全部注释,需要源程序的可以加微信x241602)...
- 【WaterRemind】用Arduino与SSD1306做一款提醒喝水的杯垫(何同学同款)