
opencv
文章平均质量分 55
opencv从零基础到项目实战
优惠券已抵扣
余额抵扣
还需支付
¥9.90
¥99.00
购买须知?
本专栏为图文内容,最终完结不会低于15篇文章。
订阅专栏,享有专栏所有文章阅读权限。
本专栏为虚拟商品,基于网络商品和虚拟商品的性质和特征,专栏一经购买无正当理由不予退款,不支持升级,敬请谅解。
东城青年
非宁静无以致远
微信号:15221816820
展开
-
OpenCV-android-sdk配置及使用(NDK)
如果将编译选项OPENCV_LIB_TYPE改成静态链接式编译,则会直接将需要的代码编译到当前模块,此时运行可执行文件时就不需要libopencv_java4.so了。打开Windows PowerShell命令行窗口,在jni文件夹路径下执行ndk-build命令,会生成libs文件夹,编译好的模块会生成在该文件夹内。opencv官网下载Android版。原创 2024-05-11 14:13:58 · 468 阅读 · 2 评论 -
图像几何变换、仿射变换、透视变换
图像坐标系->笛卡尔坐标系->图像坐标系。如果是以图像中心旋转,则left=W/2,right=H/2,其中W和H为图像旋转后的宽和高,比原始宽高大。图像旋转变换:(x,y)为原图像坐标系,(x’,y’)为以(x0,y0)为中心的笛卡尔坐标系,图像以x0,y0)为中心进行旋转。仿射变换矩阵一共有6个参数,所以我们只需要3个坐标对(6个方程)就能求解。透视变换矩阵一共有8个参数,所以我们需要4个坐标对(8个方程)才能求解。原创 2023-06-27 21:58:55 · 352 阅读 · 0 评论 -
RAW数据解析
RAW数据是sensor的输出格式,是未经处理的数据,表示的是sensor上每个感光元件接收到的不同光的强度。Raw数据在输出的时候是有一定的顺序的,一般为以下四种:00: GR/BG 01: RG/GB 10: BG/GR 11: GB/RGRaw Data数据要经过ISP(应该理解为Image Sensor Processor,是Sensor模块的组成部分)的处理才能还原出三原色,也就是说如果一个像素点感应为R值,那么ISP会根据该感光点...原创 2021-07-03 22:31:58 · 3453 阅读 · 2 评论 -
BMP位图详解
BMP文件格式,又称为Bitmap(位图),是Windows系统中广泛使用的图像文件格式。由于它可以不作任何变换地保存图像像素域的数据,因此成为我们取得RAW数据的重要来源。BMP文件的数据按照从文件头开始的先后顺序分为四个部分:bmp文件头(bmp file header):提供文件的格式、大小等信息;位图信息头(bitmap information):提供图像数据的尺寸、位平面数、压缩方式、颜色索引等信息;调色板(color palette):可选,如使用索引来表示图像,调色板就是索引与原创 2020-11-03 20:00:12 · 2076 阅读 · 1 评论 -
opencv学习笔记七十二:SVM训练分类
简单二分类 实验:#include <iostream>#include <io.h> #include "opencv2/opencv.hpp"using namespace cv;using namespace cv::ml;using namespace std;int width = 512, height = 512;Mat image = Mat::zeros(height, width, CV_8UC3); //创建窗口可视化// 设置训练原创 2020-07-24 17:36:02 · 677 阅读 · 2 评论 -
opencv学习笔记七十一:图像修复
当我们的照片有划痕或遭到人为的涂鸦(比如马赛克)时, 如果我们想让这些遭到破坏的图片尽可能恢复到原样,Opencv能帮我们做到吗?答案是肯定的。那么图像修复技术的原理是什么呢?简而言之,就是利用那些已经被破坏的区域的边缘, 即边缘的颜色和结构,根据这些图像留下的信息去推断被破坏的信息区的信息内容,然后对破坏区进行填补 ,以达到图像修补的目的。OpenCV中就是利用inpaint()这个...原创 2018-10-23 10:12:12 · 1358 阅读 · 0 评论 -
opencv学习笔记七十:图像拼接
简要:图像拼接在实际的应用场景很广,举一个例子,用你的手机对某一场景拍照,但是没有办法一次将所有你要拍的景物全部拍下来,所以你对该场景从左往右依次拍了好几张图,来把你要拍的所有景物记录下来,图像拼接就是要将这些图像拼接成一个完整的大图。核心:特征点检测 特征点匹配 图像配准(透视变换) 图像拷贝 图像融合#include<opencv2\opencv.hpp>...原创 2018-10-09 12:50:58 · 766 阅读 · 0 评论 -
opencv学习笔记六十九:人脸识别综合实践
1、下载人脸数据集,典型的有ORL,yale,我这里下载的是ORL人脸数据集,下载网址https://www.cl.cam.ac.uk/research/dtg/attarchive/facedatabase.html。2、将所有图片的路径保存在一个txt文件中,方便后面读取所有图片。 //ifstream主要对文件读操作 //ofstream主要对文件进行读写 ...原创 2018-09-29 16:38:49 · 1369 阅读 · 1 评论 -
opencv学习笔记六十八:显示中文汉字
opencv中putText只能显示英文,如果在某个程序中你想显示汉字,可在该项目上新建一个头文件项putText.h和一个putText.cpp即可。putText.h#ifndef PUTTEXT_H_#define PUTTEXT_H_ #include <windows.h>#include <string>#include <opencv...原创 2018-09-29 16:11:41 · 3443 阅读 · 1 评论 -
opencv学习笔记六十七:LBPH人脸识别算法
简要:LBPH(Local Binary PatternsHistograms)局部二进制编码直方图,建立在LBPH基础之上的人脸识别法基本思想如下:首先以每个像素为中心,判断与周围像素灰度值大小关系,对其进行二进制编码,从而获得整幅图像的LBP编码图像;再将LBP图像分为个区域,获取每个区域的LBP编码直方图,继而得到整幅图像的LBP编码直方图,通过比较不同人脸图像LBP编码直方图达到人脸...原创 2018-09-29 09:59:21 · 7082 阅读 · 1 评论 -
opencv学习笔记六十六:FisherFace人脸识别算法
简要:FisherFace是基于LDA降维的人脸识别算法,由Ronald Fisher最早提出,故以此为名。它和PCA类似,都是将原始数据映射到低维空间,但和PCA最大的区别就是它考虑了降维后数据的类间方差和类内方差,使得降维后的数据类间方差最大,类内方差最小,而PCA是使整体数据降维后的方差最大,没有考虑降维后类间的变化。这又让我想到了二值化中的自适应阈值法,跟LDA的原理有点类似,依次遍历...原创 2018-09-29 09:22:58 · 3532 阅读 · 1 评论 -
opencv学习笔记六十五:EigenFace人脸识别算法
简要:EigenFace是基于PCA降维的人脸识别算法,PCA是使整体数据降维后的方差最大,没有考虑降维后类间的变化。它是将图像每一个像素当作一维特征,然后用SVM或其它机器学习算法进行训练。但这样维数太多,根本无法计算。我这里用的是ORL人脸数据库,英国剑桥实验室拍摄的,有40位志愿者的人脸,在不同表情不同光照下每位志愿者拍摄10张,共有400张图片,大小为112*92,所以如果把每个像素...原创 2018-09-28 15:54:34 · 1785 阅读 · 1 评论 -
opencv学习笔记六十三:基于CNN的性别、年龄预测
来自于2015年CVPR的一篇paper《Age and Gender Classification using Convolutional Neural Networks》。Paper所用的网络包含:3个卷积层,还有2个全连接层。这个算是层数比较少的CNN网络模型了,这样可以避免过拟合。对于年龄的识别,paper仅仅有8个年龄段,相当于8分类模型,对于性别识别自然而然是二分类问题了。首先...原创 2018-09-27 08:30:42 · 2536 阅读 · 9 评论 -
opencv学习笔记六十二:MobileNet实现对象检测
MobileNet是SSD模型的精简版,速度更快,因为SSD检测一百多个对象,而MobileNet只检测20种物体,速度比较快,可以实时检测。mobilenet模型下载:https://github.com/weiliu89/caffe/tree/ssd#models,下载PASCAL VOC models下的第一个,其里面包含模型文件和描述文件,对于类别文件,可以打开opencv里的例程...原创 2018-09-26 08:59:33 · 2610 阅读 · 0 评论 -
opencv学习笔记六十一:Googlenet模型实现图像分类
DNN模块可以实现的功能: 图像分类 对象检测 实时对象检测图像分割预测(年龄,性别等) 视频对象跟踪 Googlenet 模型基于100万张图像实现1000个分类,首先下载模型bvlc_googlenet .caffemodel(二进制文件),模型下载地址为http://dl.caffe.berkeleyvision.org/,然后找到描述文件bvlc_...原创 2018-09-25 16:30:09 · 2465 阅读 · 1 评论 -
opencv学习笔记六十:绿幕视频背景替换
基于hsv颜色空间的实时背景替换:#include<opencv2\opencv.hpp>using namespace cv;Mat replace_and_blend(Mat &frame, Mat&mask);Mat background,frame, hsv, mask,result;int main(int arc, char** ar...原创 2018-09-25 09:52:21 · 3746 阅读 · 0 评论 -
opencv学习笔记五十九:图像融合之背景替换
以证件照为例,图片中有大部分为背景,先用kmeans对图像进行分割,可以得到背景的标签,然后将图像分为前景和背景两部分,非背景的都当作前景,显示kmeans分割后的图像dst,将原图像前景赋给dst, 背景都设为0,得到kmeans分割后的图像如下,可看到边缘处有一些小蓝边,过渡比较粗超: 所以设置遮罩层对边缘进行融合,新建掩码mask单通道图像,将前景部分置1,背景部分置0,然后对mas...原创 2018-09-24 11:30:25 · 4623 阅读 · 2 评论 -
opencv学习笔记五十八:grabCut抠图
基本步骤:基于交互式界面由用户选择前景区域; 定义一个单通道的输出掩码,0为背景,1为前景,2为可能的背景,3为可能的前景; grabCut抠图;将输出结果与可能的前景作比较得到可能的前景; 定义三通道的结果图像; 从原图中拷贝可能的前景到结果图像;grabCut( InputArray img, InputOutputArray mask, Rect rect, ...原创 2018-09-24 09:44:14 · 8532 阅读 · 1 评论 -
opencv学习笔记五十七:基于分水岭的图像分割
基本步骤:灰度二值化,形态学与距离变换再二值化,通过寻找轮廓与画轮廓生成种子点,分水岭分割,然后填色显示。#include<opencv2\opencv.hpp>using namespace cv;using namespace std;int main(int arc, char** argv) { Mat src = imread("1.jpg"); name...原创 2018-09-23 19:33:07 · 1072 阅读 · 2 评论 -
opencv学习笔记五十六:基于分水岭的粘连对象分割
一、基于分水岭的分割算法是受自然界地貌启发而来的对灰度图的地形学解释,我们考虑以下三点:1. 局部最小值点,该点对应一个盆地的最低点,当我们在盆地里滴一滴水的时候,由于重力作用,水最终会汇聚到该点。注意:可能存在一个最小值面,该平面内的都是最小值点。2. 盆地的其它位置点,该位置滴的水滴会汇聚到局部最小点。3. 盆地的边缘点,是该盆地和其它盆地交接点,在该点滴一滴水,会等概率的流向任何...原创 2018-09-23 17:06:10 · 4510 阅读 · 2 评论 -
opencv学习笔记五十五:GMM图像分割
任何一组数据(直方图),都可用多个线性叠加的高斯函数进行逼近拟合。GMM整体的概率密度函数是由若干个高斯分量的概率密度函数线性叠加而成的,而每一个高斯分量的概率密度函数的积分必然也是1,所以,要想GMM整体的概率密度积分为1,就必须对每一个高斯分量赋予一个其值不大于1的权重,并且权重之和为1。步骤:先计算所有数据对每个分模型的响应度 根据响应度计算每个分模型的参数 迭代#inc...原创 2018-09-22 14:58:41 · 3034 阅读 · 0 评论 -
opencv学习笔记五十四:KMeans图像分割
Kmeans算法是非常经典的聚类算法,在数据挖掘中kmeans经常用来做数据预处理,在图像处理中也可以用作图像的分割。原理:首先选择要聚成几个类,然后初始化中心点。比如说要聚成3类,就随机生成3个中心点,然后每个数据点选择离它最近的中心点作为一类,对组成的类取平均值就会得到三个新的中心点,再对其进行聚类,不断迭代,当迭代的次数超过某一阈值或者前后两次中心点位置不变了或变化很小就终止聚类。...原创 2018-09-22 10:33:30 · 1773 阅读 · 0 评论 -
opencv学习笔记五十三:训练自己的级联分类器
训练工作主要分为如下几步:加载训练环境 制作训练数据集 获取样本路径列表 生成正样本描述文件(.vec) 训练人脸分类器 使用分类器进行人脸检测加载训练环境 训练过程主要依靠OpenCV自带的两个可执行程序opencv_createsamples.exe和opencv_haartraining.exe操作完成的。新建一个文件夹命名为cascadeTrain,将opencv3...原创 2018-09-21 19:35:17 · 2157 阅读 · 7 评论 -
opencv学习笔记五十二:基于Haar或LBP级联分类器的实时人脸人眼检测
#include<opencv2\opencv.hpp>using namespace cv;using namespace std;int main(int arc, char** argv) { namedWindow("output", CV_WINDOW_AUTOSIZE); VideoCapture capture(0); //实例化分类器 Ca...原创 2018-09-20 11:19:28 · 844 阅读 · 2 评论 -
opencv学习笔记五十一:对象提取与测量
案例背景:下图为一张卫星拍摄的图片,要获取其中岛屿的周长和面积方案思路:高斯模糊去噪,灰度二值化提取轮廓,闭操作填充缝隙 或小的孔洞,寻找轮廓,通过轮廓特征选择轮廓#include<opencv2\opencv.hpp>using namespace cv;using namespace std;int main(int arc, char** argv) { ...原创 2018-09-19 18:50:22 · 535 阅读 · 0 评论 -
opencv学习笔记五十:透视变换综合实例
案例背景:对下面发生畸变的图像进行校正 方案思路:灰度二值化分割,闭操作,寻找轮廓,霍夫直线检测,直线排序,直线方程,直线交点,透视矩阵,透视变换。#include<opencv2\opencv.hpp>using namespace cv;using namespace std;int main(int arc, char** argv) { Mat src ...原创 2018-09-19 15:24:17 · 1119 阅读 · 2 评论 -
opencv学习笔记四十九:基于距离变换和局部自适应阈值的对象计数
案例背景:统计下图中玉米粒的个数方案思路:先灰度化,再二值化(基于THRESH_TRIANGLE,图中直方图有明显的双峰值),腐蚀去掉一些小杂点,距离变换,再自适应局部阈值,膨胀连成连通域,寻找轮廓进行计数。 距离变换于1966年被学者首次提出,目前已被广泛应用于图像分析、计算机视觉、模式识别等领域,人们利用它来实现目标细化、骨架提取、形状插值及匹配、粘连物体的分离等。距离变换是针...原创 2018-09-19 13:14:31 · 924 阅读 · 1 评论 -
opencv学习笔记四十八:对象提取
案例背景:找到下图中的圆进行定位,并计算其面积和周长。方案思路:先灰度化再二值化,再进行开操作去除杂点,寻找轮廓,通过轮廓特征找到圆部分。 #include<opencv2\opencv.hpp>using namespace cv;using namespace std;int main(int arc, char** argv) { Mat src = im...原创 2018-09-19 09:28:20 · 423 阅读 · 0 评论 -
opencv学习笔记四十七:基于形态学的直线检测
案例背景:将答题卡中的直线提取出来方案思路:二值化后利用霍夫直线检测,效果特别差;canny边缘检测后利用霍夫直线检测效果也很差,有些线检测不出来。这里采用的方法是基于形态学的直线提取,再利用霍夫直线检测。#include<opencv2\opencv.hpp>using namespace cv;using namespace std;int main(int ...原创 2018-09-18 21:07:30 · 1172 阅读 · 0 评论 -
opencv学习笔记四十六:扫描件的切边
文件扫描时得到的图片可能会有倾斜并且周围带有白边如左图,想得到较好的效果如右图。方案步骤:1.查找轮廓找到感兴趣区域(带方向的矩形)2.计算感兴趣区域的中心及角度3.计算旋转矩阵并将图像旋转摆正4.对摆正后的图像查找轮廓找到感兴趣区域(最小外接矩形)5.从摆正后的图像中抠出感兴趣区域则得到最终效果图#include<opencv2\opencv.hpp>...原创 2018-09-18 19:50:31 · 1545 阅读 · 0 评论 -
opencv学习笔记四十五:扩展模块的单目标、多目标跟踪
扩展模块的目标跟踪算法有:MIL: TrackerMIL 以在线方式训练分类器将对象与背景分离;多实例学习避免鲁棒跟踪的漂移问题. OLB: TrackerBoosting 基于AdaBoost算法的在线实时对象跟踪.分类器在更新步骤中使用周围背景作为反例以避免漂移问题. MedianFlow: TrackerMedianFlow 跟踪器适用于非常平滑和可预测的运动,物体在整个序列中可见....原创 2018-09-18 12:25:19 · 2921 阅读 · 10 评论 -
opencv学习笔记四十四:移动对象统计
步骤:利用背景消除法找到移动的物体; 预处理:进行中值滤波消除椒盐噪声,然后二值化再开操作; 寻找轮廓; 画出轮廓最小矩形并统计。#include<opencv2\opencv.hpp>using namespace cv;using namespace std;int main(int arc, char** argv) { VideoCapture capt...原创 2018-09-17 19:38:48 · 670 阅读 · 0 评论 -
opencv学习笔记四十三:CamShift目标跟踪
CamShift算法,全称是 Continuously AdaptiveMeanShift,顾名思义,它是对Mean Shift 算法的改进,能够自动调节搜索窗口大小来适应目标的大小,可以跟踪视频中尺寸变化的目标。基本思想是以视频图像中运动物体的颜色信息作为特征,对输入图像的每一帧分别作 Mean-Shift 运算,并将上一帧的目标中心和搜索窗口大小(核函数带宽)作为下一帧 Mean shift ...原创 2018-09-17 16:48:35 · 1708 阅读 · 0 评论 -
opencv学习笔记四十二:稠密光流跟踪
利用Gunnar Farneback算法计算全局性的稠密光流算法(即图像上所有像素点的光流都计算出来),由于要计算图像上所有点的光流,故计算耗时,速度慢 稠密光流需要使用某种插值方法在比较容易跟踪的像素之间进行插值以解决那些运动不明确的像素calcOpticalFlowFarneback( InputArray prev, InputArray next, InputOutputArray...原创 2018-09-17 10:33:16 · 2651 阅读 · 0 评论 -
opencv学习笔记四十一:稀疏光流跟踪
Lucas-Kanada光流假设:场景中物体被跟踪的部分的亮度不变; 相邻帧之间的运动较小; 相邻的点保持相邻。LK算法只需要每个感兴趣点周围小窗口的局部信息,但是较大的运动会将点移除这个小窗口,从而造成算法无法再找到这些点。金字塔的LK算法可以解决这个问题,即从金字塔的最高层(细节最少)开始向金字塔的最低层(丰富的细节)进行跟踪。跟踪图像金字塔允许小窗口部或较大的运动。在开始跟踪...原创 2018-09-17 09:19:12 · 3165 阅读 · 0 评论 -
opencv学习笔记四十:背景消除建模
在很多情况下,我们需要从一段视频中找到感兴趣的目标,比如说当人进入已经打烊的超市时发出警报。为了达到这个目的,我们首先需要“学习”背景模型,然后将背景模型和当前图像进行比较,从而得到前景目标。背景建模(Background Subtraction) 背景与前景都是相对的概念,以高速公路为例:有时我们对高速公路上来来往往的汽车感兴趣,这时汽车是前景,而路面以及周围的环境是背景;有时我们仅...原创 2018-09-16 10:02:00 · 1137 阅读 · 0 评论 -
opencv学习笔记三十九:视频读写
VideoCapture:视频抓取的类VideoWriter :写视频的类fps(frame per second)帧率:每秒抓取显示多少帧#include<opencv2\opencv.hpp>using namespace cv;int main(int arc, char** argv) { VideoCapture capture(0);//打开摄像头...原创 2018-09-15 13:25:54 · 345 阅读 · 0 评论 -
opencv学习笔记三十八:级联分类器人脸检测
Haar分类器算法的要点如下:① 使用Haar-like特征做检测。② 使用积分图(Integral Image)对Haar-like特征值进行加速求解。③ 使用AdaBoost算法训练区分人脸和非人脸的强分类器。④ 使用筛选式级联把强分类器级联到一起,提高准确率。Haar特征: 什么是特征,我把它放在下面的情景中来描述,假设在人脸检测时我们需要有这么一个子窗口在待检测的...原创 2018-09-15 09:38:07 · 2387 阅读 · 0 评论 -
opencv学习笔记三十七:BRISK特征点检测与匹配
BRISK算法是2011年ICCV上《BRISK:Binary Robust Invariant Scalable Keypoints》文章中,提出来的一种特征提取算法,也是一种二进制的特征描述算子。 它具有较好的旋转不变性、尺度不变性,较好的鲁棒性等。在图像配准应用中,速度比较:SIFT<SURF<BRISK<FREAK<ORB,在对有较大模糊的图像配准时...原创 2018-09-15 08:24:47 · 5764 阅读 · 0 评论 -
opencv学习笔记三十六:AKAZE特征点检测与匹配
KAZE是日语音译过来的 , KAZE与SIFT、SURF最大的区别在于构造尺度空间,KAZE是利用非线性方式构造,得到的关键点也就更准确(尺度不变性 );Hessian矩阵特征点检测 ,方向指定,基于一阶微分图像(旋转不变性 ) ;描述子生成 ,归一化处理(光照不变性 );AKAZE局特征点检测与匹配 A表示Accelerated(加速的) 与SIFT、 SUFR比较: 更加稳定 非...原创 2018-09-14 13:56:59 · 9570 阅读 · 1 评论