[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的数据格 ...
随机推荐
- day19 进程管理
day19 进程管理 什么是进程,什么是线程 1.什么是程序 一般情况下,代码,安装包等全部都是应用程序 2.什么是进程 进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进 ...
- 2019广东工业大学新生杯决赛 I-迷途的怪物
题目:I-I-迷途的怪物_2019年广东工业大学腾讯杯新生程序设计竞赛(同步赛) (nowcoder.com) 将(p-1)^n 按照多项式定理拆开,会发现只有一项没有p,其余项都有p,可直接约掉. ...
- stlink 无法再keil中识别 按下复位键可以识别
最近遇到一个很是头痛的问题 本来板子是好好的,就是从公司带回的家里 然后再次用stlink烧写程序的时候就出现了问题: 但是查看电脑端,上面是有stlink的 也就是电脑是好的, 我立刻又试了一下家中 ...
- C++自定义字符串类
//header.h #ifndef _HEADER_H #define _HEADER_H #define defaultSize 128 #include<iostream> #inc ...
- Linux磁盘分区(一)之fdisk命令
Linux磁盘分区(一)之fdisk命令转自:https://www.cnblogs.com/machangwei-8/p/10353683.html 一.fdisk 的介绍fdsik 能划分磁盘成为 ...
- ORACLE dba_extents
dba_extents OWNER 拥有者 SEGMENT_NAME 段名 PARTITION_NAME 分区名 SEGMENT_TYPE 段类型 TABLESPACE_NAME 表空间名 EXTEN ...
- layui-入门
1.下载layui 2.导入layui <title>开始使用layui</title> <!-- 导入js样式 --> <link rel="st ...
- 【Keras】神经网络的搭建
Dense层的使用方法 参考:https://blog.csdn.net/qq_34840129/article/details/86319446 keras.layers.core.Dense( u ...
- HTTP隧道解决的问题
转自别人的文章:https://blog.csdn.net/gogzf/article/details/78385506 客户端通常会用 Web 代理服务器代表它们来访问 Web 服务器.比如,很多公 ...
- IOS 真机调试和发布相关证书
一.成员介绍1. Certification(证书)证书是对电脑开发资格的认证,每个开发者帐号有一套,分为两种:1) Developer Certification(开发证书)安装在电脑上 ...