前言

1.OpenCV3之后的dnn模型可以可以调用好多用深度学习框架的训练好的模型。
2.这里我演示是我自己训练的一个围棋棋盘识别模型,使用的神经网络是VGG16,OpenCV3.3,IDE是VS2015。
3.训练好模型之后把标签文件,模型文件,配置文件复制到当前工程目录方便调用。

代码

1.标签文件内容:

label: 0
display_name: "background"
label:1
display_name: "B"
label:2
display_name: "H"

2.代码

#pragma once
#include <opencv2/opencv.hpp>
#include <opencv2/dnn.hpp>
#include <iostream>using namespace cv;
using namespace cv::dnn;
using namespace std;
const int meanValues[3] = { 104, 117, 123 };
const size_t width = 300;
const size_t height = 300;
//得到标签名
static Mat getMean(const size_t &w, const size_t &h);
static Mat preprocess(const Mat &frame);
vector<string> readLabels(string label_file);
//得到棋盘
void getBarod(Mat &src, Mat &go_barod,  string model_file, string model_text_file, string label_file);static Mat getMean(const size_t &w, const size_t &h)
{Mat mean;vector<Mat> channels;for (int i = 0; i < 3; i++){Mat channel(h, w, CV_32F, Scalar(meanValues[i]));channels.push_back(channel);}merge(channels, mean);return mean;
}static Mat preprocess(const Mat &frame)
{Mat preprocessed;frame.convertTo(preprocessed, CV_32F);resize(preprocessed, preprocessed, Size(width, height));Mat mean = getMean(width, height);subtract(preprocessed, mean, preprocessed);return preprocessed;
}void getBarod(Mat &src, Mat &go_barod, string model_file, string model_text_file, string label_file)
{Rect rect;vector<string> obj_names = readLabels(label_file);Ptr<dnn::Importer> importer;try{importer = createCaffeImporter(model_text_file, model_file);}catch (const cv::Exception &err){cerr << err.msg << endl;}Net net;importer->populateNet(net);importer.release();Mat input_image = preprocess(src);Mat blobImage = blobFromImage(input_image);net.setInput(blobImage, "data");Mat detection = net.forward("detection_out");Mat detectionMat(detection.size[2], detection.size[3], CV_32F, detection.ptr<float>());float confidence_threshold = 0.2;for (int i = 0; i < detectionMat.rows; i++){float confidence = detectionMat.at<float>(i, 2);if (confidence > confidence_threshold){size_t objIndex = (size_t)(detectionMat.at<float>(i, 1));float tl_x = detectionMat.at<float>(i, 3) * src.cols;float tl_y = detectionMat.at<float>(i, 4) * src.rows;float br_x = detectionMat.at<float>(i, 5) * src.cols;float br_y = detectionMat.at<float>(i, 6) * src.rows;rect = Rect((int)tl_x, (int)tl_y, (int)(br_x - tl_x), (int)(br_y - tl_y));rectangle(src, rect, Scalar(i * 10, 0, 255), 2, 8, 0);putText(src, format("%s", obj_names[objIndex].c_str()), Point(tl_x, tl_y), FONT_HERSHEY_SIMPLEX, 1.0, Scalar(255, 0, 0), 2);}}namedWindow("src", 0);imshow("src",src);
}//得到标签名
void readLabels(vector<string> obj_names, string label_file)
{ifstream fp(label_file);if (!fp.is_open()){printf("could not open the file...\n");exit(-1);}string name;while (!fp.eof()){getline(fp, name);if (name.length() && (name.find("display_name:") == 0)){string temp = name.substr(15);temp.replace(temp.end() - 1, temp.end(), "");obj_names.push_back(temp);}}
}void adaptiveLogarithmicMapping(const Mat& img, Mat &dst)
{Mat ldrDrago;img.convertTo(ldrDrago, CV_32FC3, 1.0f / 255);cvtColor(ldrDrago, ldrDrago, cv::COLOR_BGR2XYZ);Ptr<TonemapDrago> tonemapDrago = createTonemapDrago(1.f, 1.f, 0.85f);tonemapDrago->process(ldrDrago, dst);cvtColor(dst, dst, cv::COLOR_XYZ2BGR);dst.convertTo(dst, CV_8UC3, 255);
}vector<string> readLabels(string label_file)
{vector<string> objNames;ifstream fp(label_file);if (!fp.is_open()) {printf("could not open the file...\n");exit(-1);}string name;while (!fp.eof()){getline(fp, name);if (name.length() && (name.find("display_name:") == 0)){string temp = name.substr(15);temp.replace(temp.end() - 1, temp.end(), "");objNames.push_back(temp);}}return objNames;
}

主函数:

#include "function.h"string label_file = "weiqi.txt";
string model_file = "weiqi.caffemodel";
string model_text_file = "weiqi.prototxt";int main(void)
{Mat backbackground = imread("b1.jpg");if (backbackground.empty()){cout<<"could not load image...\n")<<endl;return -1;}Mat frame, go_barod,standard_barod;getBarod(backbackground, go_barod,model_file,model_text_file, label_file);waitKey(0);return 0;
}

测试结果:

使用OpenCV调用Caffe-SSD训练好的模型相关推荐

  1. opencv调用TensorFlow1.x训练的pb模型

    文章目录 前言 一.搭建虚拟环境 二.通过frozen_pb来生成pbtxt文件 1.获取opencv官方的转化文件 2.生成pbtxt文件 三.OpenCV调用pb模型 前言 通过opencv读取p ...

  2. 【opencv】调用caffe、tensorflow、darknet模型

    本文参考自:opencv调用cCaffe.TensorFlow.Torch.PyTorch训练好的模型 往往,当我们训练好一个模型后,就可以通过OpenCV加载模型使用该模型,完成分类和实时预测的任务 ...

  3. caffe开始训练自己的模型(转载并验证过)

    学习caffe中踩了不少坑,这里我参考了此博主的文章,并体会到了如何训练自己的模型:http://www.cnblogs.com/denny402/p/5083300.html 学习caffe的目的, ...

  4. caffe使用训练好的模型对自己的一张图片进行测试

      前面学习了如何训练模型,也学了如何用测试集测试模型.但是好像还不会拿一张自己的图片去模型中进行测试.这篇文章就主要聊聊如何使用训练好的模型对自己的一张图片进行测试!(前面提到了做的项目是藏文识别, ...

  5. 使用SSD训练自己的模型(从图片标注开始)

    此文章参考了https://blog.csdn.net/zzZ_CMing/article/details/81131101  在此表示感谢,如果有侵权的地方可联系本人删除 训练手表模型步骤 未经允许 ...

  6. caffe 使用训练好的模型进行测试

    1.准备所需文件 在caffe/examples 新建一个文件夹 1.1 文件清单 模型:train_iter_xxxx.caffemodel deploy.prototxt python 均值文件: ...

  7. Java如何跨语言调用Python/R训练的模型

    在 如何使用sklearn进行在线实时预测(构建真实世界中可用的模型) 这篇文章中,我们使用 sklearn + flask 构建了一个实时预测的模型应用.无论是 sklearn 还是 flask,都 ...

  8. 机器学习——Java调用sklearn生成好的Logistic模型进行鸢尾花的预测

    机器学习是python语言的长处,而Java在web开发方面更具有优势,如何通过java来调用python中训练好的模型进行在线的预测呢?在java语言中去调用python构建好的模型主要有三种方法: ...

  9. 8_用opencv调用深度学习框架tenorflow、Pytorch、Torch、caffe训练好的模型(20190212)

    用opencv调用深度学习框架tenorflow.Pytorch.Torch.caffe训练好模型(20190212) 文章目录: https://blog.csdn.net/hust_bochu_x ...

  10. OpenCV的dnn模块调用TesorFlow训练的MoblieNet模型

    七月 上海| 高性能计算之GPU CUDA培训 7月27-29日三天密集式学习  快速带你入门阅读全文> 正文共2073个字,2张图,预计阅读时间10分钟. 一.初得模型 那是一个月之前的事情了 ...

最新文章

  1. 上标3下标6算法_图解堆排序算法
  2. 解耦HTML、CSS和JavaScript
  3. Python函数参数学习
  4. 推荐两本移动开发挺火的书
  5. 一个经典的WIN32窗口应用
  6. 微软中国回应关闭实体直营店:中国市场保持正常营运
  7. Python数据结构实战——数(Tree)
  8. freeswitch 用户配置详解_FreeSwitch配置和使用手册
  9. linux中的jiffies变量
  10. 萤石云平台接入_前端接入萤石云视频
  11. 有关arcmap的学习使用心得
  12. 1995-2020年省级地级市环境污染数据集 三废排放、废气烟粉尘废水固体废物排放、空气质量AQI、空气污染物浓度PM2.5、环境投资保护治理数据
  13. 生命计算机在线,生命计算器
  14. 谷歌google chrome浏览器Chrome版本太旧无法更新chrome无法更新至最新版本怎么办
  15. Tomcat部署及负载均衡_wuli大世界_新浪博客
  16. 淘宝/天猫/京东/拼多多/苏宁易购/小米商城/华为商城/抖音快手直播/茅台抢购助手,宝惠抢购助手/OK助手源码
  17. 手机app网易邮箱服务器设置,网易邮箱默认开通IMAP服务
  18. jQuery cdn加速
  19. AI识别照片是谁,人脸识别face_recognition开源项目安装使用 | 机器学习
  20. 计算机编程入门语言哪个好?

热门文章

  1. 二叉树初始化_Java实现二叉树
  2. C与指针、C陷阱与缺陷
  3. svm 的提前处理
  4. Vue.js 服务端渲染
  5. List与Map的遍历过程中删除元素
  6. TCP报文段首部格式详解
  7. JSP快速入门教程——全十讲
  8. 实例教程:1小时学会Python
  9. Office word中mathtype公式与LaTex公式代码互转
  10. Word无法打开该文件,因为文件格式与文件扩展名不匹配的解决办法