[opencv]GeneralProcessing_Template_Function
//
// 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的更多相关文章
- opencv在图像显示中文
在图像定位和模式识别时,经常需要把结果标注到图片上,标注内容可以是数字字母.矩形框等(opencv支持的)或者是中文汉字(借助freetype). 1.显示数字/矩形框 #include <op ...
- opencv中Mat与IplImage,CVMat类型之间转换
opencv中对图像的处理是最基本的操作,一般的图像类型为IplImage类型,但是当我们对图像进行处理的时候,多数都是对像素矩阵进行处理,所以这三个类型之间的转换会对我们的工作带来便利. Mat类型 ...
- opencv源码:cascadedetect
级联分类器检测类CascadeClassifier,提供了两个重要的方法: CascadeClassifier cascade_classifier; cascade_classifier.load( ...
- 基于OpenCV的车辆检测与追踪的实现
最近老师布置了一个作业,是做一个基于视频的车辆检测与追踪,用了大概两周的时间做了一个简单的,效果不是很理想,但抑制不住想把自己的一些认识写下来,这里就把一些网络上的博客整理一下分享给大家,希望帮助到大 ...
- OpenCV人脸识别Eigen算法源码分析
1 理论基础 学习Eigen人脸识别算法需要了解一下它用到的几个理论基础,现总结如下: 1.1 协方差矩阵 首先需要了解一下公式: 共公式可以看出:均值描述的是样本集合的平均值,而标准差描述的则是样本 ...
- OpenCV人脸识别LBPH算法源码分析
1 背景及理论基础 人脸识别是指将一个需要识别的人脸和人脸库中的某个人脸对应起来(类似于指纹识别),目的是完成识别功能,该术语需要和人脸检测进行区分,人脸检测是在一张图片中把人脸定位出来,完成的是搜寻 ...
- OpenCV模板匹配算法详解
1 理论介绍 模板匹配是在一幅图像中寻找一个特定目标的方法之一,这种方法的原理非常简单,遍历图像中的每一个可能的位置,比较各处与模板是否“相似”,当相似度足够高时,就认为找到了我们的目标.OpenCV ...
- android studio 使用 jni 编译 opencv 完整实例 之 图像边缘检测!从此在andrid中自由使用 图像匹配、识别、检测
目录: 1,过程感慨: 2,运行环境: 3,准备工作: 4,编译 .so 5,遇到的关键问题及其解决方法 6,实现效果截图. (原创:转载声明出处:http://www.cnblogs.com/lin ...
- 海康网络摄像机YV12转换为BGR,由opencv Mat显示 (转)
我使用的是海康DS-2CD852MF-E, 200万,网络摄像机,已经比较老了,不过SDK在海康官网下载的,开发流程都差不多. 海康摄像机回调解码后的视频数据格式为YV12,顺便说一下YV12的数据格 ...
随机推荐
- C语言time函数获取当前时间
以前放了个链接,但是原作者把博文删了,这里放一个获取时间的代码,已经比较详细所以不做注释 #include<stdio.h> #include<time.h> #include ...
- 转 android design library提供的TabLayout的用法
原文出处:http://chenfuduo.me/2015/07/30/TabLayout-of-design-support-library/ 在开发中,我们常常需要ViewPager结合Fragm ...
- Android 百度地图用法
一.展示百度地图,并将一个指定的点(根据经纬度确定)展示在手机屏幕中心 1.下载百度地图移动版API(Android)开发包 要在Android应用中使用百度地图API,就要在工程中引入百度地图API ...
- ORACEL 创建DIRECTORY
oracle要直接对文件进行读写必须先创建一个DIRECTORY. 语法如下: CREATE DIRECTORY UTL_FILE_DIR AS '/home/oracle/oradir'; 可以通过 ...
- 【编程思想】【设计模式】【基础模式Fundamental】delegation_pattern
Python版 https://github.com/faif/python-patterns/blob/master/fundamental/delegation_pattern.py #!/usr ...
- 【Linux】【Services】【SaaS】Docker+kubernetes(1. 基础概念与架构图)
1.简介 1.1. 背景:公司正在进行敏捷开发环境的搭建,以取代传统的架构,好处大大的,我就不赘述了.公司原来负责这个项目的同事要转组,我只好交给另外同事继续,但是为了防止同样的事情,我也需要深入了 ...
- XML名命空间
XML的名命空间就类似于java的包,命名空间定义:xmlns:***="URI",默认命名空间定义:xmlns="URI" 引号中的URl内容用来唯一标识命名 ...
- 初步接触Linux命令
目录 虚拟机快照 1.首先将已经运行的系统关机 2.找到快照 拍摄快照 3.找到克隆 下一步 有几个快照会显示几个 4.克隆完成后 要修改一下IP 不然无法同时运行两个虚拟机系统 系统介绍 1.pin ...
- python的随机森林模型调参
一.一般的模型调参原则 1.调参前提:模型调参其实是没有定论,需要根据不同的数据集和不同的模型去调.但是有一些调参的思想是有规律可循的,首先我们可以知道,模型不准确只有两种情况:一是过拟合,而是欠拟合 ...
- greeting-150
拿到程序例行检查,可以看出程序是32位的程序 将程序放入ida中进入主函数查看 但是我们将程序运行一次后发现程序还运行了nao的程序 说明程序在中间还引用了nao函数,通过代码审计我们可以很直接的看到 ...