自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(28)
  • 收藏
  • 关注

原创 图像矩

图像矩描述了图像的全局特征一阶矩与形状有关二阶距显示曲线围绕直线平均值的扩展程度三阶矩是关于平均值的对称性测量由二阶和三阶矩可以导出7个不变矩,不变矩是图像的统计特性,满足平移、伸缩、旋转的不变性矩的计算:1.C++ Moments moments(InputArray array,bool binaryImage=false)用于计算多边形和光栅形状的最高达三阶的所有

2016-08-21 20:34:24 369 1

原创 opencv中使用形状包围轮廓

外部矩形边界 C++ Rect boundingRect(InputArray points)最小包围矩形:C++ RotatedRect minAreaRect(InputArray points)最小包围圆形:C++ void minEnclosingCircle(InputArrayPoints,Point2f&center,float&radius)椭圆拟合:C++ Rotat

2016-08-21 14:51:13 1376

原创 凸包(Convex Hull)

给定二维平面上的点集,凸包就是将最外层的点连接起来构成的凸多边形凸缺陷(convexity defects)是凸包比物体轮廓多的部分函数:convexHull寻找凸包函数程序:随机生成一些坐标点,然后对这些点构成的几何图形求凸包int main(){  Mat src;  src.create(600,600,CV_8UC3);//生成一张画布  RNG rng;

2016-08-21 08:45:37 5284

原创 findContours和drawContours的使用

虽然书上说与Canny的区别是,Canny没有将边缘看成整体,这里将边缘看成一个整体的轮廓,但还是没有看出来区别……程序一:基础的轮廓检测和绘制,基于二值化int main(){   Mat src=imread("renti2.jpg",0);   Mat dst,result;   threshold(src,dst,160,255,THRESH_BINARY); 

2016-08-20 15:48:32 711

原创 直方图均衡化

直方图均衡化广泛应用于图像增强处理。均衡化对图像的改变是,削弱了灰度值集中在0-255的某个频段,而使灰度值在整个频谱均匀分布。equalizeHist()int main(){   Mat src=imread("cui.jpg",0);   Mat dst;   equalizeHist(src,dst);   imshow("a",dst);   wait

2016-08-20 11:58:02 238

原创 仿射变换

放射变换都可以表示为乘以一个矩阵再加上一个向量的形式:可以做三种动作:1.旋转 (线性变换)2.平移(向量加)3.缩放(线性变换)放射变换函数:warpAffine()对应关系是三个点二维旋转变换矩阵:getRotationMatrix2D()对应关系是中心点,旋转角度和缩放倍数,得到对应关系后,最终归于warpAffine其他小知识:point2D32f表示两

2016-08-20 10:43:43 322

原创 remap()函数

键盘ASCII码,查询网页http://zhidao.baidu.com/link?url=KNf7KZYWf4jCalCKhxDVifYFCWkg4tlN0rsFQ-ZnHRinzgAhdl9fgCNirjuKu_lW4Wy3rnHdjOsQbFHlA8uBLK//目的,写一个键盘控制的remap函数,数字1是上下颠倒,数字2是左右颠倒,q退出;int main(){

2016-08-20 10:11:58 338

原创 霍夫(Hough)变换

霍夫变换一种特征提取技术,是从图像中识别几何形状的基本方法之一霍夫变换的三种形态:1.标准霍夫变换(SHT),由HoughLines函数调用2.多尺度霍夫变换(MSHT),由HoughLines函数调用3.累计概率霍夫变换(PPHT),由HoughLinesP函数调用在霍夫变换中,采用极坐标系表示直线总结一下:霍夫变换的实质是,寻找通过图像中某一点的所有直线,再寻找通过图像

2016-08-20 09:02:43 408

原创 边缘检测函数:Canny() Sobel() Laplacian()scharr滤波器

边缘:灰度或结构等信息的突变处,边缘是一个区域的结束,也是另一个区域的开始,利用该特征可以分割图像,这也是边缘检测的意义。Canny()作用:检测图像边缘应用:int main(){Mat src=imread("lou.jpg",0);Mat dst,temp;blur(src,src,Size(5,5));Canny(src,dst,10,20,5)

2016-08-19 09:22:34 1013

原创 图像金字塔与图像缩放

图像金字塔:金字塔底部图像分辨率高,尺寸大,金字塔顶部分辨率低,尺寸小。这里与其说是金字塔,不如说是倒金字塔,因为这里说的向上就是向尺寸更大,向下就是向尺寸更小,所以倒金字塔与这些动词更相符。对应的Opencv函数也是如此pyrUp函数:向上采样函数,图像首先在每个维度上扩大两倍,新增的行以0填充,然后通过内部的卷积计算去估计丢失的像素pyrDown函数:向下采样函数,这是一个会丢

2016-08-17 20:44:33 2592

原创 几种基于膨胀和腐蚀的更高级运算,morphologyEx()函数

既然是基于膨胀和腐蚀的运算,那么再让我们详细了解一下膨胀和腐蚀到底对图像做了什么?第一种情况,对于二值图像来说腐蚀:核与其覆盖的图像部分做“与”操作,如果全为1,则该像素点为1,否则为0;也就是0容易得到,图像更多的地方变黑了,白色部分被腐蚀了膨胀:核与其覆盖的图像部分做“与”操作,如果全为0,则该像素点为0,否则为1;也就是1容易得到,图像更多的地方变白了,白色部分膨胀了第二种情

2016-08-13 12:08:33 12733

原创 腐蚀和膨胀

形态学是一门图像分析学科,是基于形状的一系列操作。最基本的操作是腐蚀(erode)和膨胀(dilate),他们都是针对白色区域而言的。膨胀和腐蚀从数学角度说,就是将图像的一部分与核进行卷积。核具有一个单独定义出来的锚点(anchorpoint) 他们的内部核心函数都是morphOp下面的程序是控制条控制腐蚀和膨胀的程序。#include#include #include #i

2016-08-13 12:05:13 214

原创 Opencv中的非线性滤波器概念介绍——中值滤波、双边滤波

中值滤波(Median filter)用像素点灰度值的中值代替像素点的灰度值,从而消除孤立的噪声点,可以去除椒盐噪声(salt-and-pepper noise)和脉冲噪声和斑点噪声(speckle noise),是经典的平滑噪声处理方法。优点:可以克服线性滤波带来的图像模糊问题,更好的保存图像边缘。缺点:花费的时间是均值滤波的5倍以上。函数原型:void medianBlur

2016-08-13 10:06:33 388

原创 Opencv中的3种线性滤波器

图像滤波:指在尽量保留图像特征的情况下,对图像的噪声进行抑制,对后续处理的有效性和可靠性有直接影响。图像的平滑处理(Smoothing)和模糊处理(bluring)是去掉高频噪声的处理,和低通图像滤波是一个意思。线性滤波:1.方框滤波——boxblur 非归一化的方框滤波用于计算邻域内的积分特性;归一化后的特殊情况是均值滤波,也就是normalize=true时的情况。在O

2016-08-12 16:18:16 454

原创 Opencv输出XML和YAML文件

XML:extensible markup language可扩展标识语言YAML:yet another markup language 仍是一种标识语言FileStorage是OpenCV中管理XML和YAML的一个存储类,封装了所有相关的信息。在C++中,规定与类同名的成员函数就是构造函数。主要用来在创建对象时初始化对象, 即为对象成员变量赋初始值。一个类可以有多个构造函

2016-08-11 16:32:45 225

原创 OpenCV中对图像进行二维离散傅里叶变换

#include#include #include #include #include #include using namespace cv;using namespace std;int main (){//第一步,读入图像,进行错误检测Mat src=imread("logo.png",0);     //千万不要忘了读取的是灰度图像!!!!i

2016-08-11 14:34:14 3749

原创 Opencv中颜色通道分离、混合的split和merge

spilt 将一个多通道的Mat分离成三个单通道的Matmerge正相反int main (){vector channels;Mat src=imread("lou.jpg");Mat dst;split(src,channels);merge(channels,dst);imshow("s",dst);waitKey(0);       这没

2016-08-08 16:45:58 650

原创 Opencv中三种遍历元素的方法及程序计时方法

//第一种,用指针遍历#include#include #include #include using namespace cv;using namespace std;void colorReduce(Mat &dst,uchar a){for(int i=0;i{uchar* data=dst.ptr(i);for(int j=0;j

2016-08-08 15:38:02 203

原创 Opencv中对查找表LUT的使用与理解

查找表:OpenCV中将data定义为uchar*,而当我们用构造函数创建一个Mat对象的时候,可以指定图像的数据类型有CV_8UC1、CV_8UC3、CV_32FC1、CV_32FC3等多种,那么我们如何通过data指针去访问和修改图像的某一个像素值呢,对于数据为uchar类型的Mat对象,可以直接用data访问和修改,对于数据为float或double类型的Mat对象,我们同样可以用dat

2016-08-08 15:17:03 1223

原创 Opencv中Point类,Scalar类,Rect类,Size类,cvtcolor函数,Range类

Point类:Point_,Point,Point2i等价Point_,Point2f等价Scalar类:Scalar与Scalar_等价是Vex4b的一个变种,如果用不到第四个参数,不用写出来Size类:Size与Size_还有Size2i等价Range类:Mat B = A(Range::all(), Range(1, 3));//提取 A 的1 (含)

2016-08-08 15:15:29 667

原创 Opencv的Mat型

Mat由信息头和矩阵内容两部分组成,创建新的Mat分为两种:一、只创建信息头Mat A;//只创建了一个信息头A=imread("a.jpg");// 创建了矩阵内容,开辟了内存下面两种方式,只复制信息头:1.Mat B=A;2.Mat B(A);这里通过任何一个对象改变Mat A也会改变其他对象,也就是他们都指向唯一一个数据矩阵。当然还有第三种方式,比较特殊,是创

2016-08-05 17:57:32 359

原创 Opencv的准备阶段小知识

1.匈牙利命名法: 变量名=属性+类型+对象;2.argc和argv是UNIX,Linux,MacOS中main函数的标准写法。3.在Windows的控制台程序中,将main()函数作为程序入口点,并且很少使用argc和argv等参数;4.printf函数标准的C语言函数,包含在 stadio.h当中,但是opencv中也包含它,只要包含了opencv.hpp就可以使用它;最后一个字母

2016-08-02 15:14:22 173

原创 Opencv对摄像头进行Canny边缘

#include "highgui.h"#include "opencv2/imgproc/imgproc.hpp"using namespace std;using namespace cv;int main(){VideoCapture video1(0);  //打开摄像头Mat frame,frame2;while(1)

2016-08-02 10:48:38 203

原创 OpenCv的图像腐蚀小程序

OpenCV提供了一个函数getStructuringElement,可以获取常用的结构元素的形状:矩形(包括线形)、椭圆(包括圆形)及十字形。MORPH_RECT, MORPH_ELLIPSE, MORPH_CROSS#include "highgui.h"             //媒体文件输入输出、视频捕捉、图像视频的编码等#include "opencv2/imgpr

2016-08-01 17:05:16 505

原创 Opencv中用进度条调节亮度、对比度

#include  "highgui.h"#include  "iostream"#include  "vector"using namespace std;using namespace cv;static void callbackSlide(int ,void*);      Mat img,src;                        //步骤

2016-08-01 10:09:31 801

原创 Opencv中添加进度条及回调函数

在说明如何给视频中添加进度条之前,先要解释下回调函数:打个比方,有一家旅馆提供叫醒服务,但是要求旅客自己决定叫醒的方法。可以是打客房电话,也可以是派服务员去敲门,睡得死怕耽误事的,还可以要求往自己头上浇盆水。这里,“叫醒”这个行为是旅馆提供的,相当于库函数,但是叫醒的方式是由旅客决定并告诉旅馆的,也就是回调函数。而旅客告诉旅馆怎么叫醒自己的动作,也就是把回调函数传入库函数的动作,称为登

2016-07-30 11:48:15 3830

原创 关于opencv播放视频的笔记

#include  "highgui.h"#include  "iostream"using namespace std;using namespace cv;int  main(){VideoCapture video1("Seq04.avi");                                   //当后面的文件名为0时为打开摄像头if

2016-07-29 17:11:44 226

原创 Opencv获取视频文件参数的属性标识符

#include  "highgui.h"#include  "iostream"using namespace std;using namespace cv;int  main(){ VideoCapture video1("Seq04.avi"); if(video1.isOpened()) cout<<"wrong"<<endl; double

2016-07-29 14:21:20 623

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除