//
// Created by leoxae on 2019-05-08.
// #ifndef OPENCVDEMO_UTILS_H
#define OPENCVDEMO_UTILS_H #include <iostream>
#include <map>
#include <sstream>
#include <vector>
#include <algorithm>
#include <chrono>
#include "../globals.h"
#include "opencv2/opencv.hpp" #define Max(a, b) (a > b ? a : b)
#define Min(a, b) (a < b ? a : b) using namespace std ;
using namespace cv ; class TempHelper { public: static long getTickCount()
{
auto now = std::chrono::steady_clock::now();
std::chrono::milliseconds ms(0);
ms=std::chrono::duration_cast<std::chrono::milliseconds>(now.time_since_epoch()); return ms.count();
} /**
* 批量删除vector中的元素
* @tparam T 泛型
* @param src 数据源
* @param rms 待删除的数据
* @return
*/
template<typename T> static auto removeAll(std::vector<T> &src, std::vector<T> &rms); /**
* 删除vector中单个元素
* @tparam T
* @param src
* @param a
* @return
*/
template<typename T> static auto removeObj(std::vector<T> &src, T &a){
typename std::vector<T>::iterator d = remove(src.begin(), src.end(), a);
src.erase(d, src.end());
return src;
} /**
* 直接把对象tostring
* @tparam T
* @param t
* @return
*/
template<typename T> static auto toString(const T& t)
{
std::ostringstream oss; //创建一个格式化输出流
oss<<t; //把值传递到流中
return oss.str();
} /**
* 批量添加元素
* @tparam T
* @param src
* @param need
* @return
*/
template<typename T> static auto addAll(std::vector<T> &src, std::vector<T> &need){
for (auto it = need.begin(); it != need.end(); ++it) {
src.emplace_back(*it);
}
return src;
} /**
* 取特定个数元素
* @tparam T
* @param src
* @param size
* @return
*/
template<typename T> static auto subVector(std::vector<T> &src, const int &size){
std::vector<T> vt;
int idx = 0;
for(auto itx = src.begin(); itx != src.end(); ++itx){
if (idx == size) {
break;
}
vt.emplace_back(*itx);
idx ++;
}
return vt;
} template<typename T> static auto split_and_toString(std::vector<T> src, std::string split){
std::string data ;
for (auto itx = src.begin(); itx != src.end(); ++itx) {
data += (*itx) + split;
}
return data.substr(0, data.length() - 1);
} /****
* 排序
* @tparam A
* @tparam B
* @param p
* @return
*/
template<typename A, typename B> static std::pair<B,A> flip_pair(const std::pair<A,B> &p)
{
return std::pair<B,A>(p.second, p.first);
} template<typename A, typename B> static std::multimap<B,A> flip_map(const std::map<A,B> &src)
{
std::multimap<B,A> dst;
std::transform(src.begin(), src.end(), std::inserter(dst, dst.begin()),
flip_pair<A,B>);
return dst;
} /**
* 数组长度
* @tparam T
* @param ary
* @return
*/
template<class T> static int getAryLen(T &ary) {
return sizeof(ary) / sizeof(ary[0]);
} }; template<typename T>
auto TempHelper::removeAll(std::vector<T> &src, std::vector<T> &rms) {
for (auto it = rms.begin(); it != rms.end(); ++it) {
typename std::vector<T>::iterator del = remove(src.begin(), src.end(), (*it));
src.erase(del, src.end());
}
return src;
} ////////////////////////
template<class T>
int length(T& arr)
{
//cout << sizeof(arr[0]) << endl;
//cout << sizeof(arr) << endl;
return sizeof(arr) / sizeof(arr[0]);
} /**
* 对数组取平均
*
* @param ary
* @return
*/
static double avg(double ary[]) {
int size = length(ary);
double total = 0;
for (int i = 0; i < size; i++) {
total += ary[i];
}
return total / size;
} //char getCardName(char content) {
// char regex = "([\u4e00-\u9fa5]+)";
// Pattern p = Pattern.compile(regex);
// Matcher m = p.matcher(content);
// while (m.find()) {
// return m.group(0);
// }
// return "未找到卡片名称";
//} // std::vector<cv::DMatch> DmatchtoArray() {
// int num = int total();
// DMatch a[] = new DMatch[num];
// if (num == 0) {
// return a;
// } else {
// float buff[] = new float[num * 4];
// this.get(0, 0, buff);
//
// for(int i = 0; i < num; ++i) {
// a[i] = new DMatch((int)buff[4 * i + 0], (int)buff[4 * i + 1], (int)buff[4 * i + 2], buff[4 * i + 3]);
// }
//
// return a;
// }
//} #endif //OPENCVDEMO_UTILS_H

[opencv]GeneralProcessing_Template_Function的更多相关文章

  1. opencv在图像显示中文

    在图像定位和模式识别时,经常需要把结果标注到图片上,标注内容可以是数字字母.矩形框等(opencv支持的)或者是中文汉字(借助freetype). 1.显示数字/矩形框 #include <op ...

  2. opencv中Mat与IplImage,CVMat类型之间转换

    opencv中对图像的处理是最基本的操作,一般的图像类型为IplImage类型,但是当我们对图像进行处理的时候,多数都是对像素矩阵进行处理,所以这三个类型之间的转换会对我们的工作带来便利. Mat类型 ...

  3. opencv源码:cascadedetect

    级联分类器检测类CascadeClassifier,提供了两个重要的方法: CascadeClassifier cascade_classifier; cascade_classifier.load( ...

  4. 基于OpenCV的车辆检测与追踪的实现

    最近老师布置了一个作业,是做一个基于视频的车辆检测与追踪,用了大概两周的时间做了一个简单的,效果不是很理想,但抑制不住想把自己的一些认识写下来,这里就把一些网络上的博客整理一下分享给大家,希望帮助到大 ...

  5. OpenCV人脸识别Eigen算法源码分析

    1 理论基础 学习Eigen人脸识别算法需要了解一下它用到的几个理论基础,现总结如下: 1.1 协方差矩阵 首先需要了解一下公式: 共公式可以看出:均值描述的是样本集合的平均值,而标准差描述的则是样本 ...

  6. OpenCV人脸识别LBPH算法源码分析

    1 背景及理论基础 人脸识别是指将一个需要识别的人脸和人脸库中的某个人脸对应起来(类似于指纹识别),目的是完成识别功能,该术语需要和人脸检测进行区分,人脸检测是在一张图片中把人脸定位出来,完成的是搜寻 ...

  7. OpenCV模板匹配算法详解

    1 理论介绍 模板匹配是在一幅图像中寻找一个特定目标的方法之一,这种方法的原理非常简单,遍历图像中的每一个可能的位置,比较各处与模板是否“相似”,当相似度足够高时,就认为找到了我们的目标.OpenCV ...

  8. android studio 使用 jni 编译 opencv 完整实例 之 图像边缘检测!从此在andrid中自由使用 图像匹配、识别、检测

    目录: 1,过程感慨: 2,运行环境: 3,准备工作: 4,编译 .so 5,遇到的关键问题及其解决方法 6,实现效果截图. (原创:转载声明出处:http://www.cnblogs.com/lin ...

  9. 海康网络摄像机YV12转换为BGR,由opencv Mat显示 (转)

    我使用的是海康DS-2CD852MF-E, 200万,网络摄像机,已经比较老了,不过SDK在海康官网下载的,开发流程都差不多. 海康摄像机回调解码后的视频数据格式为YV12,顺便说一下YV12的数据格 ...

随机推荐

  1. 商业爬虫学习笔记day8-------json的使用

    一. 简介 JSON,全称为JavaScript Object Notation(JavaScript对象标记),它通过对象和数组的组合来表示数据,是一种轻量级的数据交换格式.它基于 ECMAScri ...

  2. Codeforces Round #754 (Div. 2) C. Dominant Character

    题目:Problem - C - Codeforces 如代码,一共有七种情况,注意不要漏掉  "accabba"  , "abbacca"  两种情况: 使用 ...

  3. Mysql不锁表备份之Xtrabackup的备份与恢复

    一.Xtrabackup介绍 MySQL冷备.热备.mysqldump都无法实现对数据库进行增量备份.如果数据量较大我们每天进行完整备份不仅耗时且影响性能.而Percona-Xtrabackup就是为 ...

  4. Enumeration遍历http请求参数的一个例子

    Enumeration<String> paraNames=request.getParameterNames(); for(Enumeration e=paraNames;e.hasMo ...

  5. PowerDotNet平台化软件架构设计与实现系列(08):缓存平台

    几乎所有后端应用都会或多或少用到缓存,尤其是分布式缓存服务,以及和本地缓存构造的二级缓存.根据我们一贯的节约代码的风格,为了复用的目标,抽象出缓存平台,进行缓存管理. 考虑到很多公司都会自己造或者直接 ...

  6. LuoguB2029 大象喝水 题解

    Update \(\texttt{2021.12.4}\) 修改了原先的错误代码,给各位造成影响,在此表示很抱歉. Content 大象要喝 \(20\) 升水,但现在只有一个深 \(h\) 厘米,半 ...

  7. 第一周python学习总结

    多行注释:格式化输出内容,用{}传递变量内容 执行输出 while: for XXX: if: range(satar,end,步长) break continue input 等于python2里面 ...

  8. re正则表达式:import re ;re.search()

    http://www.cnblogs.com/alex3714/articles/5161349.html re模块 常用正则表达式符号 1 2 3 4 5 6 7 8 9 10 11 12 13 1 ...

  9. href超级链接里加上javascript代码的,还有target问题

    href超级链接里加上javascript代码的,还有target问题 得把target="_blank"去掉才好用,在google浏览器有这个也没事,但是在Ie里有这个就不行了

  10. netcore XmlDocument 使用Load和Save方法

    string path ="C://xxx/file" XmlDocument xmlDoc = new XmlDocument(); #if NET462 xmlDoc.Load ...