
OpenCV
eastRiseWm
耍也是很累的
展开
-
OpenCV:23.实时人脸检测和识别
实时人脸检测和识别1. 训练人脸样本2. 识别人脸具体代码请看:NDKPractice项目的opencv711. 训练人脸样本三种训练方法:eigenFace 算法 : EigenFaceRecognizerFisherFace 算法:FisherFaceRecognizerLBPH 算法:LBPHFaceRecognizer网站1网站2Java_com_east_opencv71_FaceDetection_trainingPattern(JNIEnv *env, jobject i原创 2020-11-11 13:55:16 · 220 阅读 · 0 评论 -
OpenCV:22.实时人脸检测
实时人脸检测1. 相机实时人脸检测2. 人脸识别相关: 均值,方差与协方差、特征值与特征向量3.人脸识别相关:PCA 原理与应用 (降维)1. 相机实时人脸检测具体代码请看:NDKPractice项目的opencv70 // @param 1.1 会采用上采样、下采样、缩放比例 // @param 3 会检测多少次才能判断是个人脸 // @param Size(width/4,height/4) 最小的人脸大小 // @param Size(width,height) 最原创 2020-11-11 13:53:37 · 212 阅读 · 0 评论 -
OpenCV:21.人脸识别 - HOG 和 LBP 特征检测
人脸识别 - HOG 和 LBP 特征检测1. HOG(Histogram of Oriented Gradient) 特征检测的实现原理1.1 检测窗口:2. 实现行人检测3.LBP (Local Binary Patterns)特征介绍4.手写 LBP 特征算法实现5.haar 特征介绍具体代码请看:NDKPractice项目的opencv69人脸检测分为以下几步特征提取:边缘,角点,点,线,平坦区训练样本:正向样,负向样本 (xml文件)特征匹配:DDM , detection (发现)原创 2020-11-11 13:51:45 · 699 阅读 · 0 评论 -
OpenCV:20.二维码检测
二维码检测1.二维码检测1.二维码检测思路:代码:// 如果是倾斜的 变换菱形 放正Mat wrapTransfrom(const Mat &gray,const RotatedRect &rect){ int width = rect.size.width; int height = rect.size.height; Mat result(Size(width,height),gray.type()); // 矩阵怎么获取 vector<Point>原创 2020-11-11 13:48:07 · 233 阅读 · 0 评论 -
OpenCV:19.人脸美容效果2-边缘处理
人脸美容效果2-边缘处理1.快速边缘保留算法1.快速边缘保留算法先看两张图:具体代码// 1. 快速边缘保留#include<opencv2/opencv.hpp>#include<iostream>using namespace cv;using namespace std;// 1. 快速边缘保留int getBlockSum(Mat &sum_mat,int x0,int y0,int x1,int y1,int ch){ //原创 2020-11-11 13:45:56 · 312 阅读 · 0 评论 -
OpenCV:18.人脸美容效果-积分图
人脸美容效果-积分图1. 双边滤波美容2.卷积模糊算法,时间复杂度分析3. 积分图算法介绍4. 使用积分图算法对卷积模糊进行优化5.快速边缘保留算法1. 双边滤波美容int main(){ Mat src = imread("E:/meirong.jpg"); if (!src.data){ cout << "read error" << endl; return -1; } imshow("src",src); Mat dst; bilateralFi原创 2020-11-05 13:20:46 · 339 阅读 · 0 评论 -
OpenCV:17.手写直方图和直方均衡
手写直方图和直方均衡1.亮度增强(线性方式)2.直方均衡,提升对比度3. 手写直方图计算源码4. 手写直方图均衡1.亮度增强(线性方式)int main(){ Mat src = imread("E:/2_05.jpg"); if (!src.data){ cout << "read error" << endl; return -1; } imshow("src",src); cout << src.channels() << en原创 2020-11-05 13:18:41 · 376 阅读 · 0 评论 -
OpenCV:16.封装 java 层 sdk 模型
封装 java 层 sdk 模型1. 苏宁体育面试题讲解(一面)2. NDK 学到什么程度3.如何封装 java 层 sdk 模型4.动手封装OpenCV的Mat.java 对象5.NDK异常处理需要注意的地方6.java和C++的回收机制具体代码请看:NDKPractice项目的opencv64小的需求:优化下Bitmap加载图片的源码(严格控制下内存)1. 苏宁体育面试题讲解(一面)HashMap 的实现,如何判断超出了原存储空间,超出了如何扩容,如果存入 key 相同,值如何存入。(之前手写原创 2020-11-05 13:17:07 · 360 阅读 · 0 评论 -
OpenCV:15.图片的几何变换
图片的几何变换1. 图片旋转2. 矩阵仿射变换3. reSize() 图片缩放4.remap 重映射 (自己实现)具体代码请看:NDKPractice项目的opencv631. 图片旋转Java_com_east_opencv63_OpenCvUtils_rotation(JNIEnv *env, jclass clazz, jobject bitmap) { Mat src; cv_helper::bitmap2mat(env, bitmap, src); int res原创 2020-11-05 13:16:21 · 140 阅读 · 0 评论 -
OpenCV:14.说说图片效果
说说图片效果1. opencv 的用处2. Bitmap 的解封装与编解码3. 逆世界效果4.浮雕效果5.马赛克6.毛玻璃效果7. 油画特效效果8. 处理速度性能优化具体代码请看:NDKPractice项目的opencv621. opencv 的用处提高图片的视觉,图片变换效果提取图像的特征,用来分析图像识别,直播,人脸,指纹,二维码,汽车牌照识别2. Bitmap 的解封装与编解码你给一个错误地址,或者给一个文本地址,Glide 是如何判断图片格式,是否错误之类的呢?根据流读出来的头原创 2020-11-05 13:15:38 · 779 阅读 · 0 评论 -
OpenCV:13.轮廓查找、图像矩、多边形测试、图像分水岭
轮廓查找、图像矩、多边形测试、图像分水岭1. 银行卡轮廓查找与绘制2. [图像矩,多边形测试](http://www.opencv.org.cn/opencvdoc/2.3.2/html/doc/tutorials/imgproc/shapedescriptors/point_polygon_test/point_polygon_test.html#point-polygon-test)3. 图像分水岭1. 银行卡轮廓查找与绘制使用到的api/*参数说明:https://blog.youkuaiyun.com/原创 2020-11-05 13:13:41 · 243 阅读 · 0 评论 -
OpenCV:12.直方图比较和匹配
直方图比较和匹配1. 直方图比较 (compareHist 2组数据去对比)1.1 相关性比较 HISTCMP_CORREL (多少的时候是最好的 1) N bins 直方图的等级1.2 卡方比较 HISTCMP_CHISQR (多少的时候是最好的 0)1.3 十字交叉性 HISTCMP_INTERSECT1.4 巴氏距离 CV_COMP_BHATTACHARYYA (多少的时候是最好的 0)2. 直方图反向投射 (反射投影的次数 (不是像素值))3.[直方图模板匹配](http://ww原创 2020-11-05 13:12:48 · 636 阅读 · 0 评论 -
OpenCV:11.色彩空间与直方图均衡化
色彩空间与直方图均衡化1. RGB与HSV2.归一化 normalize3.直方图均衡化 equalizeHistogram4.直方图的计算和绘制1. RGB与HSVrgb请看下图:HSV 分析:H : Hue 色相 色调,色度 0~360度 360种S :Saturation 饱和度V :Value 亮度作用:证件照背景替换,扣头发等等2.归一化 normalize归一化:就是把需要处理的数据经过处理后,限制在你需要的一定范围内。例如假设我们把训练数据的第一个属性从[-10,+原创 2020-11-05 13:10:05 · 1302 阅读 · 0 评论 -
OpenCV:10.霍夫检测(直线、圆检测)与重映射(镜像翻转)
霍夫检测【直线、圆检测】与重映射【镜像翻转】1. 霍夫直线检测2. 霍夫圆检测3.重映射1. 霍夫直线检测作用:检测图片当中点集合中的直线。(比如提取图片中的直线:车道线)先来看下原理图:再来看下opencv中的代码int main(){ Mat src = imread("E:/houghLine.jpg"); if (!src.data){ cout << "read error" << endl; return -1; } imshow("src原创 2020-11-05 13:08:17 · 197 阅读 · 0 评论 -
OpenCV:09.图片边缘检测
图片边缘检测1. Sobel 算子 检测图片边缘2. Scharr 增强求边缘3. Laplance 图片边缘检测4.Canny 图片边缘检测1. Sobel 算子 检测图片边缘先来看下微积分求导:上代码:int main(){ Mat src = imread("E:/card1.png"); if (!src.data){ cout << "read error" << endl; return -1; } imshow("src", src);原创 2020-11-05 13:05:53 · 189 阅读 · 0 评论 -
OpenCV:08.边缘类型、自定义线性滤波、阈值
边缘类型、自定义线性滤波、阈值1. 了解下卷积操作2. 处理边缘类型3. 自定义线性滤波与图片模糊(算子也叫作 核)4.阈值(图像二值化)1. 了解下卷积操作概念:把kernel(卷积核)放到我们图像的矩阵之上,求锚点周围覆盖的像素乘积之和(包括锚点),用来计算锚点的像素值覆盖图片下面的像素值,称之为卷积操作。2. 处理边缘类型copyMakeBorder(src,dst,src.rows/8,src.rows/8,src.cols/8,src.cols/8,BORDER_DEFAULT);B原创 2020-11-04 15:52:01 · 377 阅读 · 0 评论 -
OpenCV:07.形态学,验证码,提取水平线,上、降采样
形态学,验证码,提取水平线,上、降采样1. 形态学操作2. 验证码识别3. 提取水平线4. 上采样与降采样1. 形态学操作morphologyEx腐蚀:erode 取最小值膨胀:dilate 取最大值MORPH_OPEN 开:先腐蚀后膨胀MORPH_CLOSE 闭:先膨胀后腐蚀MORPH_GRADIENT 梯度:膨胀 - 腐蚀MORPH_TOPHAT 顶帽:原图像 - 开图像MORPH_BLACKHAT 黑帽:闭图像 - 原图像int main(){ Mat src = imrea原创 2020-11-04 15:50:33 · 260 阅读 · 0 评论 -
OpenCV:06.中值滤波、腐蚀、膨胀、实现图片的美容效果-双边滤波
中值滤波、腐蚀、膨胀、实现图片的美容效果-双边滤波1. 中值滤波与双边滤波2. 腐蚀与膨胀1. 中值滤波与双边滤波medianBlur 中值 对所有考虑点进行排序,取中间的那个值(替换到矩阵的中心点) 1,2,“3”,4,5 去掉噪音(很多 黑白点的情况)bilateralFilter 双边 可以用作美容 ,基于高斯,高斯保留的轮廓并不强,双边保留的轮廓信息会增强,基于高斯再增加像素差使用到的 api// @params d : 滤波过程中使用的每个像素邻域的直径。如果它是非正的,它是原创 2020-11-04 15:48:56 · 525 阅读 · 0 评论 -
OpenCV:05.Bitmap性能优化(LruCache)和高斯模糊
@TOC1. Bitmap 占用内存分析及常见优化分析工具:AS3.0以上使用 Android Profile,以下可以使用 Android Device Monitor优化:耗时操作可以通过 Rxjava 去切换到子线程处理如果涉及到高斯模糊,从网络上下载的大图,根据ui需求,通过 Glide 重新调整其大小(这样减少高斯模糊的计算时间)使用LruCache 缓存,根据不同机型分配 不同的缓存 大小1.1 Lrucache 两个点记录记得重写 Lrucache 的 sizeOf(K原创 2020-11-04 15:44:54 · 294 阅读 · 0 评论 -
OpenCV:04.inline、define和图像的形状绘制和卷积掩膜操作
inline、define和图像的形状绘制和卷积掩膜操作1. inline 和 define2.形状和文件绘制3.图像卷积和滤波操作3.1 图像矩阵掩膜操作 (可以过滤图像信息)1. inline 和 defineinline是内联函数,类似于 define 都可以做到编译时替换区别:define 并没有严格的检测,inline函数的参数有确切的类型所以会有严格的类型检测#define Max(a,b) a>b ? a :b // inline 内联函数,类似于 define 做到编译时替换原创 2020-11-04 15:38:20 · 313 阅读 · 0 评论 -
OpenCV:03.Mat对象和图像混合
Mat对象和图像混合1. mat 常见用法2. 图像操作3. 图像混合4.饱和度、亮度和对比度1. mat 常见用法Mat srcsrc.empty() 判断mat是否为空,搭配imread判断文件是否存在src.data 头指针,通过判断是否为 NULL 也能判断图片是否存在Mat的构造函数: // Mat的构造函数 // CV_8UC1 1个颜色的通道 (0-255) // CV_8UC2 2个颜色的通道 16位 RGB565 // CV_8UC3 3个颜色的通道 24位原创 2020-11-04 15:36:54 · 263 阅读 · 0 评论 -
OpenCV:02.android滤镜(不用opencv来写)
@TOC具体代码请看:NDKPractice项目的opencv49androidfiltereffects1. 使用ColorMatrix颜色矩阵: @Nullable public static Bitmap gray(@Nullable Bitmap src) { Bitmap dst = Bitmap.createBitmap(src.getWidth(),src.getHeight(),src.getConfig()); Canvas canv原创 2020-11-04 15:35:44 · 173 阅读 · 0 评论 -
OpenCV:01.安装和转灰度图提升饱和度
安装和转灰度图提升饱和度1. VS 安装、配置Opencv的环境c++ 中 uchar2. opencv方法介绍:3. 彩色图转灰度图及黑白图(手写)1. VS 安装、配置Opencv的环境我们是在 windows的VS中开发 使用功能的方式是:头文件+dll文件的方式来学习opencv的一些常见使用方法。下载 opencv.exe 并解压生成->配置管理器->平台修改为x64配置windows环境变量:path : opencv解压目录\build\x64\vc14\bin配置头原创 2020-11-04 15:33:57 · 283 阅读 · 0 评论