[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的数据格 ...
随机推荐
- 14. GLIBCXX_3.4.9' not found - 解决办法
在Linux中安装交叉编译器arm-linux-gcc 4.4.3,然后编译mini2440内核出错: /usr/lib/libstdc++.so.6: version GLIBCXX_3.4.9' ...
- celery开启worker报错django.core.exceptions.ImproperlyConfigured: Requested setting INSTALLED_APPS, but settings are not configured. You must either define the environment variable DJANGO_SETTINGS_MODULE o
其实挺简单的问题,但花了自己一个下午来解决,先是浏览各种博客,无果:没办法,然后去看celery官方文档,无果,近乎绝望,最后仔细看代码,找到问题所在(如下),自学狗这效率...... 下面是自己ta ...
- 安全相关,关于https
什么是 HTTPS HTTPS(全称:Hyper Text Transfer Protocol over Secure Socket Layer),是以安全为目标的HTTP通道,简单讲是HTTP的安全 ...
- oracle(创建数据库对象)
1 --创建数据库 2 --1.SYSDBA系统权限 3 startup:--启动数据库. 4 shutdown:--关闭数据库. 5 alter database[mount]|[open]|[ba ...
- Dubbo多协议支持
除了Dubbo服务暴露协议Dubbo协议外,Dubbo框架还支持另外8种服务暴露协议:RMI协议.Hessian协议.HTTP协议.WebService协议.Thrift协议.Memcached协议. ...
- linux系统下安装dubbo-admin
1.在安装dubbo-admin之前确保你得linux服务器上已经成功安装了jdk,tomcat, 若还没安装jdk以及tomcat则参考我的上一篇文章"linux环境下安装jdk,tomc ...
- Map集合的认识和理解
java.util.Map(k,v)集合* Map的特点:* 1.Map集合是一个双列集合,一个元素包含两个值(一个是key,一个是Value)* 2.Map集合中的元素,key和value的类型可以 ...
- numpy基础教程--浅拷贝和深拷贝
在numpy中,使用等号(=)直接赋值返回的是一个视图,属于浅拷贝:要完整的拷贝一个numpy.ndarray类型的数据的话,只能调用copy()函数 # coding = utf-8 import ...
- smbclient 使用方法
1,列出某个IP地址所提供的共享文件夹 smbclient -L 198.168.0.1 -U username%password 2,像FTP客户端一样使用smbclient smbcl ...
- selenium chrome一些配置问题
chrome和chromedriver要对应,chrome版本查询:打开chrome,在地址栏输入:chrome://version/ 附: 所有chromedriver均可在下面链接中下载到:htt ...