
Opencv常用函数介绍
文章平均质量分 84
五仁月饼哭了
海阔凭鱼跃,天高任鸟飞。
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
归一化函数naomalize详解
opencv 2 归一化函数normalize详解1. 归一化定义与作用 归一化就是要把需要处理的数据经过处理后(通过某种算法)限制在你需要的一定范围内。首先归一化是为了后面数据处理的方便,其次是保证程序运行时收敛加快。归一化的具体作用是归纳统一样本的统计分布性。归一化在0-1之间是统计的概率分布,归一化在某个区间上是统计的坐标分布。归一化有同一、统一和合一的意思。原创 2016-07-12 09:11:27 · 2174 阅读 · 0 评论 -
opencv之图像的旋转
旋转变换公式的推导:如下图, 在2维坐标上,有一点p(x, y) , 直线op的长度为r, 直线op和x轴的正向的夹角为a。 直线op围绕原点做逆时针方向b度的旋转,到达p’ (s,t) 则有s = r cos(a + b) = r cos(a)cos(b) – r sin(a)sin(b) t = r sin(a + b) = r sin(a)co原创 2017-04-21 11:22:20 · 800 阅读 · 0 评论 -
VS2010播放.WAW音频文件
1.PlaySound函数因为涉及到代码调用音频,百度到最简单的音频调用函数:https://msdn.microsoft.com/en-us/library/windows/desktop/dd743680BOOL PlaySound( LPCTSTR pszSound, HMODULE hmod, DWORD fdwSound);各个参数意思:pszSoun原创 2017-04-27 15:48:37 · 2988 阅读 · 2 评论 -
opencv之fitline直线拟合
fitline拟合函数:CV_EXPORTS_W void fitLine( InputArray points, //待输入点集OutputArray line, //输出点集(一个是方向向量,另一个是拟合直线上的点)int distType,//拟合方法double param, //以下参数使用默认值double reps, double aeps );拟合方法总结:CV原创 2017-05-27 11:30:24 · 14566 阅读 · 1 评论 -
基于 HoughLinesP函数应用
1.概率霍夫变换HoughLinesP能够检测出线端,即能够检测出图像中直线的两个端点,确切地定位图像中的直线。void HoughLinesP(InputArray image,OutputArray lines, double rho, double theta, int threshold, double minLineLength=0,double maxLineGap=0 )原创 2017-04-28 15:50:26 · 4428 阅读 · 1 评论 -
opencv之仿射与透视变换总结
对于仿射变换和透视变换的数学原理没有看懂,虽然是矩阵之间的各种转换,但是借用opencv函数可以轻易实现对图片的变换。放射变换要基于图片的三个点变换,而透视变换是3D平面,故其需要4个固定点才能 变换。开始介绍:仿射变换:void warpAffine(InputArray src, OutputArray dst, InputArray M, Size dsize, int flag原创 2017-05-09 20:43:57 · 625 阅读 · 0 评论 -
C++多线程入门
多线程在编程中有相当重要的地位,我们在实际开发时或者找工作面试时总能遇到多线程的问题,对多线程的理解程度从一个侧面反映了程序员的编程水平。 其实C++语言本身并没有提供多线程机制(当然目前C++ 11新特性中,已经可以使用std::thread来创建线程了,因为还没有系统地了解过,所以这里不提了。),但Windows系统为我们提供了相关API,我们可以使用他们来进行多线程编程。创建线程的原创 2017-05-02 20:48:55 · 561 阅读 · 0 评论 -
opencv之车牌检测(初)
1.we get the classifier of plates with the way of haar and adaboost too. we can detect the front of the plate or a certain slope plate ,At the same time just can distinguish between blue and white pl原创 2017-06-04 14:33:46 · 1969 阅读 · 0 评论 -
opencv之模板匹配(初)
#include "stdafx.h"#include#includeusing namespace std;using namespace cv;Rect select;bool select_flag = false;Mat img, showImg,roiImg,dst_image,result;void A_on_Mouse(int event, int x, int原创 2017-05-22 13:33:50 · 815 阅读 · 0 评论 -
如何设置感兴趣的区域ROI
一、定义:ROI区域有两种算法,第一种是表示矩形区域的Rect区域,它指定矩形的左上角坐标和矩形的长和宽;另一个函数是Range,它是从起始索引到终止索引(不包括终止索引)的一段连续区域,我感觉就是矩形行数的范围和猎术范围叠加起来而形成的一个矩阵,从而定义一个矩形区域。方法一:Rect函数:rect(x -> cols, y -> rows, width -> cols, heig原创 2016-07-13 10:22:37 · 7871 阅读 · 0 评论 -
Opencv之存储并标记视频每一帧
前言:在做相关实验时,有时需要把视频的每一帧都保存下来并记录帧号,那么如何保存及记录的?在网上搜了下,比较普遍的程序是IplImage结构的:一、IplImage结构#include #include #include #include int main(int argc, char *argv[]){ CvCapture* capture = cvCa原创 2016-09-28 11:40:04 · 4295 阅读 · 0 评论 -
opencv之光照补偿和去除光照
图像预处理用原创 2017-07-07 14:14:20 · 53954 阅读 · 12 评论 -
opencv之大津法Otsu介绍
所谓大津法(Otsu)就是最大类间差方法,通过统计图像直方图信息来自动确定阈值T,从而来区分前景与背景,说白了就是能自动区分图像前景与背景的二值化。算法流程描述:1.遍历图像像素,统计每个像素值出现的次数,即255个bin,统计每个bin像素值的个数;2.遍历0到255每个像素,以i像素值为当前分类的阈值,在(0~i)范围内计背景像素平均灰度u0,背景部分像素点数所占比例w0;在(i~原创 2017-06-11 17:40:14 · 4802 阅读 · 2 评论 -
Mat格式读取视频和打开摄像头
刚接触opencv一段时间,突然想到用opencv怎么读取摄像头和打开电脑里的视频文件,从而为处理视频开一个头,在网上找了一些资料,有的比较实现起来比较复杂,有的格式比较老,但还是有收获的,现在将他们整理如下: 一、打开摄像头 贴程序: #include #includeusing namespace cv;using namespace std;int原创 2016-07-13 14:57:54 · 4268 阅读 · 0 评论 -
opencv之图片简单压缩
一、简单常用#include #include#include #include using namespace std;using namespace cv;double T = 40;void resize(Mat&);void pyrDown_up(Mat&);int main(){ Mat src = imread("H://学习资料//[原创 2017-09-04 11:35:33 · 7173 阅读 · 2 评论 -
图像的长宽以及灰度、RGB图像的像素原理分布
今天在看矩形滤波的时候忽然脑子短路,把一些概念全弄混了,现总结一下,以便下次再混的时候可以参考确认下,自己的理解,有错的地方还请指正。 首先,在Opencv2中基本上都是用的Mat来表示图像了,C++的函数调用中基本上也都是Mat图,从根本上说,一张图像是一个由数值组成的矩阵,矩阵的每一个元素代表一个像素。对于灰度图像而言,像素有8位无符号数表示,其中0代表黑色,255代表原创 2017-04-20 11:38:34 · 10849 阅读 · 0 评论 -
sobel算子原理与实现
一、原理:首先介绍背景知识: 1)边缘:灰度或结构等信息的突变处,边缘是一个区域的结束,也是另一个区域的开始,利用该特征可以分割图像。 2)边缘点:图像中具有坐标[x,y],且处在强度显著变化的位置上的点。 3)边缘段:对应于边缘点坐标[x,y]及其方位 ,边缘的方位可能是梯度角。 索贝尔算子(Sobeloperator)主要用作边缘原创 2016-07-15 15:12:37 · 165025 阅读 · 6 评论 -
Opencv访问图像像素的三种方法
一、指针法给图像的像素赋值,以此来访问图像的像素。#include #includeusing namespace std;using namespace cv;int main(){ Mat image = imread("D:\\vvoo\\lena.jpg"); imshow("image", image); //三通道 uchar *data = imag原创 2016-09-05 21:09:30 · 10587 阅读 · 0 评论 -
opencv之简单几何图形实现
一、基本函数介绍:(1)点:Point a = Point (1000,1000); (2)文字函数putText():void putText( CvArr* img, const char* text, CvPoint org, const CvFont* font,CvScalar color ); img: 输入图像 text: 要显示的字符串 org:原创 2016-09-09 15:10:28 · 3324 阅读 · 0 评论 -
Opencv之获取边缘和画轮廓
有很多时候,我们需要获得图形上的某物体轮廓,Opencv提供两个函数findContours()和drawContours(),一个是寻找轮廓,一个是画轮廓,下面就来介绍这两个函数:一、findContours()void findContours//提取轮廓,用于提取图像的轮廓(InputOutputArray image,//输入图像,必须是8位单通道图像,并且应该转化成二值的原创 2016-09-10 18:55:57 · 29490 阅读 · 0 评论 -
Opencv之<Vec3b>是什么东东
一、What is vector? vector(向量): C++中的一种数据结构,确切的说是一个类.它相当于一个动态的数组,当程序员无法知道自己需要的数组的规模多大时,用其来解决问题可以达到最大节约空间的目的.用法:1.文件包含: 首先在程序开头处加上#include以包含所需要的类文件vector,还有一定要加上using name原创 2016-09-12 21:06:16 · 78027 阅读 · 15 评论 -
Opencv之图像平移、镜像
图像的平移、旋转、镜像都是图像处理的基本功,按理说我现在研究它,有点晚了,但我还是抽些时间写下吧,弥补过去的无所事事。一、图像的平移 我们设现在的像素点是(x,y),水平平移距离dx=dy,那么平移后的像素大小为(X,Y)=(x-dx,y-dy)。 下面介绍几种方法来实现图像的平移1.自己用暴力青年.data写的#include#includeusing n原创 2016-09-12 14:27:17 · 7034 阅读 · 2 评论 -
Opencv之鼠标响应setMouseCallback()的用法
平时在写代码时可能用到鼠标在图上做标记等其他作用,opencv主要用setMouseCallback()这个函数,下面来讲解:一、setMouseCallback() void setMousecallback(const string& winname, MouseCallback onMouse, void* userdata=0) winname:窗口的名字 on原创 2016-09-17 11:03:52 · 69282 阅读 · 9 评论 -
CV_8UC1,CV_8UC2,CV_8UC3等意思
我也不是很熟,但是Mat存图像也用过,试着说一下我的理解:一般的图像文件格式使用的是 Unsigned 8bits吧,CvMat矩阵对应的参数类型就是CV_8UC1,CV_8UC2,CV_8UC3。(最后的1、2、3表示通道数,譬如RGB3通道就用CV_8UC3)而float 是32位的,对应CvMat数据结构参数就是:CV_32FC1,CV_32FC2,CV_32FC3...doub原创 2016-09-09 15:42:49 · 141013 阅读 · 0 评论 -
Opencv之实现图像修复intpaint()函数
无意中看到inpaint()这个函数,它具有图像修复功能,这个应该很有趣,故查找了相关资料,整理好并呈现在这里。一、inpaint()函数介绍void inpaint( const Mat& src, const Mat& inpaintMask, Mat& dst, double inpaintRange, int flags );原创 2016-09-17 16:56:46 · 11172 阅读 · 0 评论 -
Opencv之简单皮肤检测代码
经过前人学者大量的皮肤统计信息可以知道,如果将皮肤信息映射到YCrCb空间,则在CrCb二维空间中这些皮肤像素点近似成一个椭圆分布。因此如果我们得到了一个CrCb的椭圆,下次来一个坐标(Cr, Cb)我们只需判断它是否在椭圆内(包括边界),如果是,则可以判断其为皮肤,否则就是非皮肤像素点。 本文写这篇博客是参考了一个大牛的,我把自己看完总结的笔记写在这里,如有雷同也很正常。一、前原创 2016-09-19 20:54:57 · 3626 阅读 · 0 评论 -
Opencv之分水岭原理和实现
在很多实际应用中,我们需要分割图像,分割方法有多种经典的分割方法:一、常见图像分割方法:1、基于边缘检测的方法: 此方法主要是通过检测区域的边缘进行分割,利用区域之间的特征的不一致性,首先检测图像中的边缘点,然后按照一定的方法把这些边缘点进行全部连接起来,从而构成分割区域。图像中的边缘通常是灰度,颜色或者纹理,其中基于灰度的方法很普遍,许多边缘检测算子利用灰度来检测图像的梯原创 2016-09-17 19:17:00 · 5905 阅读 · 0 评论 -
Opencv之Kmeans算法实现
一、原理 在machine learning 中已经详细的介绍了,参http://blog.youkuaiyun.com/qq_29540745/article/details/52621383.在使用kmeans之前,必须先了解kmeans算法的2个缺点:第一是必须人为指定所聚的类的个数k;第二是如果使用欧式距离来衡量相似度的话,可能会得到错误的结果,因为没有考虑到属性的重要性和相关性。为了减原创 2016-09-22 19:45:18 · 2853 阅读 · 0 评论 -
灰度直方图的原理和计算
include #include #include #include using namespace cv;using namespace std;int main(){ Mat src, gray; src = imread("D:\\vvoo\\lena.jpg"); cvtColor(src, gray, CV_RGB2GRAY); int bins = 256;//原创 2016-07-11 09:43:00 · 21704 阅读 · 0 评论 -
opencv人脸检测和跟踪
一、我的分类训练器的xml文件路径如下:D://opencv//sources//data//haarcascades//haarcascade_frontalface_alt.xml每个人的安装位置不同,训练器的xml也不同,我的是opencv3.0的。二、先检测一张如图片里的人脸程序:#include#include using namespace std;u原创 2016-07-18 11:14:05 · 4392 阅读 · 0 评论 -
图像腐蚀、膨胀、基本原理和程序实现
图像的腐蚀与膨胀一、原理:⑴ 图像形态学处理的概念 数字图像处理中的形态学处理是指将数字形态学作为工具从图像中提取对于表达和描绘区域形状有用处的图像分量,比如边界、骨架以及凸壳,还包括用于预处理或后处理的形态学过滤、细化和修剪等。图像形态学处理中我们感兴趣的主要是二值图像。⑵ 二值图像的逻辑运算 逻辑运算尽管本质上很简单,但对于实现以形态学为基础原创 2016-07-17 12:34:21 · 21083 阅读 · 2 评论 -
opencv自带之图像拼接
看效果:#include #include #include#include "opencv2/stitching.hpp"using namespace std;using namespace cv;bool try_use_gpu = false;vector imgs;string result_name = "resultss.jpg";int main(in原创 2017-09-07 13:55:57 · 980 阅读 · 0 评论