OpenCV
zxucver
这个作者很懒,什么都没留下…
展开
-
OpenCV ImageWatch插件安装与使用说明
安装在使用OpenCV时,如果我们想看到一个图片的处理效果,只能把它显示出来,而插入断点调试也只能看到Mat类型变量中的一些信息,看不到图片效果。而ImageWatch插件提供了这种功能。 官方网址:点击打开 我已经下载好了,也可以在这里下载:点击下载在官方网页我们可以看到,该插件专门为Visual studio准备,而且现在只支持VS2102,VS2103和VS2105。下载...原创 2017-05-04 11:07:16 · 2311 阅读 · 2 评论 -
OpenCV人脸检测 人脸打码
利用opencv提供的级联分类器,实现人脸检测,并对人脸部位做打码处理原创 2017-01-08 21:39:39 · 3214 阅读 · 0 评论 -
OpenCV 删除轮廓的方法(一)
一种比较方便的删除轮廓的处理方式,是我刚刚学习到的一个方法,在这之前,如果我想删除一个不需要的轮廓,用的方法是将该轮廓填充为背景色,之前的博客提到过,在countours容器中,如果把轮廓填充为背景色,那么只是视觉上看不到该轮廓,但是实际上还存在在容器中。所以之前总是要填充之后从新copyto一下,然后重新找一遍轮廓,达到删除轮廓的效果。这种方式实在是low。原创 2016-12-20 17:51:43 · 10618 阅读 · 1 评论 -
OpenCV 应用读取文件路径与文件名批量处理图片
在应用opencv大量测试图片时,需要对图片批量的读入并进行处理。之前处理这个问题时是使用这种方法:把待处理的图片放到一个文件夹内,全选它们然后重命名1,这样系统会自动给他们全部重命名为1(1),1(2),1(3)等等等 然后用下面的代码把图片读进来:原创 2016-12-28 22:44:38 · 7962 阅读 · 11 评论 -
OpenCV 应用边缘检测与霍夫线变换实现旋转角度检测
首先我们需要画出一个这样的图片,此时兴趣区域的角度为0度使用opencv的图片旋转功能,把它旋转一个角度,旋转方法参考: http://blog.csdn.net/chaipp0607/article/details/63263347逆时针旋转3.3度后,作为待检测图片。由于我的原始图片很大2592*2048,前面做了很多预处理工作,流程图: double t = (double)getTi原创 2017-03-18 20:18:08 · 7185 阅读 · 10 评论 -
OpenCV findContours函数时的小发现
在应用opencv中findContours()函数与drawContours()函数进行滤波时,将检测到的面积小于某个值的轮廓使用drawContours()函数涂成黑色,此时在显示的图片上看不到该轮廓,但是此时的轮廓并没有在vector > contours容器中删除。原创 2016-10-19 13:34:37 · 4226 阅读 · 0 评论 -
OpenCV 利用getTickCount()与getTickFrequency()计算执行时间
其实这是个很简单的应用,贴出来是因为我经常能用到这两个函数,顺便写一下吧。double t1 = (double)getTickCount();...double t2 = (double)getTickCount();cout<<"time:"<<(t2-t1)*1000/getTickFrequency()<<endl;getTickCount()与getTickFreque原创 2017-05-01 16:37:51 · 20541 阅读 · 2 评论 -
OpenCV 3.1 imwrite()函数写入异常问题解决方法
最近配置了OpenCV3.1版本,按照2.x的习惯写了一个保存图片的代码(测试证明该代码在2.4.11下运行正常),但是在使用imwrite()函数的时候出现了异常。 代码如下:#include <opencv2/imgproc/imgproc.hpp>#include <opencv2/core/core.hpp>#include <opencv2/highgui/highgui.hpp>原创 2017-04-15 20:37:39 · 18399 阅读 · 6 评论 -
OpenCV 各数据类型中的行与列,宽与高,x与y
在IplImage类型中图片的尺寸用width和 height来定义,在Mat类型中换成了cols与rows,但即便是这样,在C++风格的数据类型中还是会出现width和 height的定义,比如Rect。这些细节如果不加注意,代码不会报错,但是运行后结果就不是我们想要的了,甚至直接出现异常。原创 2017-03-13 22:51:48 · 6456 阅读 · 0 评论 -
OpenCV findContours函数边缘近似方法
在使用OpenCV的过程中,findContours是相对使用比较多的,在之前的博客中,介绍了vector<vector<Point> > contours容器: http://blog.csdn.net/chaipp0607/article/details/52858661 查找轮廓时内轮廓与外轮廓: http://blog.csdn.net/chaipp0607/article/detail原创 2017-03-24 12:03:05 · 5091 阅读 · 2 评论 -
OpenCV 对轮廓的绘图与筛选操作总结
OpenCV利用findContours找到图像中的轮廓,根据这些轮廓的特征进行筛选有利于进一步逼近最终的兴趣区域,减少其他算法的时间,提高代码的运行效率,而对轮廓的绘图则可以直观的看到筛选结果。其实绘图的函数在下面的博客中就已经总结过,不过这次换了一个思路重新温习下这些函数,并把他们应用到轮廓的绘图中。 http://blog.csdn.net/chaipp0607/article/detail原创 2017-04-22 15:38:12 · 7334 阅读 · 1 评论 -
OpenCV 几何变换-图像镜像
图像镜像是图像基本的几何变换之一,实现起来也很简单,先贴上源码:#include <opencv/highgui.h> #include <time.h> #include <opencv2/opencv.hpp> #include <opencv/cv.h> #include <iostream> using namespace std; using namespace cv;原创 2017-04-28 22:25:28 · 2534 阅读 · 0 评论 -
OpenCV 直线拟合及应用
直线拟合顾名思义就是根据多个有限个数的点确定一条直线。依据为: 其中为第i个点到直线的距离,p(d)则为确定最小值的函数。而不同的p(d)对应着不同的直线拟合方法:OpenCV提供了7种(-1为用户定义)直线拟合方法,如下:CV_DIST_USER =-1, /* User defined distance */CV_DIST_L1 =1, /* distance =原创 2017-05-07 20:55:09 · 3854 阅读 · 0 评论 -
Windows Python2.7配置OpenCV3.2
OpenCV3.2最高支持到Python2.7版本,配置起来还是非常简单的,下面给出需要的下载地址: Python2.7.5 Numpy1.10.0 Matplotlib1.3.0 OpenCV3.2安装Python以及Numpy、Matplotlib,一直下一步就好,我装在了默认路径下,其中Numpy、Matplotlib的安装会自动找Python的安装路径。安装完成后打开Python自带原创 2017-05-14 11:49:18 · 3327 阅读 · 2 评论 -
OpenCV 几何变换-图像缩放
图像的缩放主要用于改变图像的大小,缩放后图像的图像的宽度和高度会发生变化。在图像处理中是一种很基础的几何变换,但是具有很重要的作用,比如:当输入图片尺寸过大时,处理速度会很慢,适当的缩小图像可以在不影响处理效果的同时有效提高代码执行速度。 opencv提供了resize函数实现图片缩放功能,函数原型为:CV_EXPORTS_W void resize( InputArray src, Outp原创 2017-03-08 16:46:57 · 4045 阅读 · 0 评论 -
OpenCV saturate_cast防溢出
saturate_cast函数在OpenCV中的作用是防数据溢出,我们在直接操作像素点的时候,如果数值结果是赋值或者超过了255的话,在图片中是没办法显示的,这就是防数据溢出的作用,那么什么时候会有数据溢出的风险呢,这种情况在图像卷积操作的时候比较常见。 下面我们举个栗子吧: 选择一个3*3的锐化作用的卷积核,设计如下: (0, -1, 0, -1, 5, -1,原创 2017-10-18 20:30:36 · 2797 阅读 · 0 评论 -
OpenCV 几何变换-图像旋转
这里写链接内容OpenCV提供了warpAffine函数实现图片仿射变换功能,我们可以利用这个函数实现图像旋转,函数原型为:CV_EXPORTS_W void warpAffine( InputArray src, OutputArray dst,InputArray M, Size dsize,int flags=INTER_LINEAR,int borderMode=BORDER_C原创 2017-03-18 18:24:54 · 7452 阅读 · 0 评论 -
OpenCV 调用摄像头
OpenCV调用摄像头还是很简单的,同样是由VideoCapture 来控制,一种是VideoCapture(const string& filename)用来打开视频文件,一种是VideoCapture(int device)用来打开设备。原创 2017-01-20 22:54:01 · 4013 阅读 · 0 评论 -
OpenCV 角点检测(一) Moravec
什么是角点角点一般反应的是图像中局部最大值或最小值的孤立点,以角点为中心点的窗口向图像中的任意方向滑动,都会引起较大的灰度变化。Moravec角点 Moravec角点检测算子于1981年提出,是最早的角点检测算法之一。Moravec角点检测算子通过计算中心像素点的0°,45°,90°,135°四个方向的灰度差的平方和,并取其中最小的值作为中心点的兴趣值。其中(u,v)为中心点(x,y)的0°,45原创 2017-01-21 22:54:42 · 4341 阅读 · 1 评论 -
OpenCV mat类实现水平投影和垂直投影
图像经过灰度化和otsu阈值分割,分别绘制水平和垂直投影#include<iostream> #include <cv.h> #include <highgui.h> #include <cvaux.h> #include <tchar.h> using namespace std ;using namespace cv ;int main(){ //原图 Mat原创 2017-01-13 11:06:33 · 8940 阅读 · 0 评论 -
OpenCV 几何变换-图像平移
我们可以通过对图像的像素点的操作,实现图像平移效果:平移灰度图像:SrcImage=imread("1.jpg");cvtColor(SrcImage,SrcImage,CV_BGR2GRAY);Mat MoveImage(SrcImage.rows,SrcImage.cols,CV_8UC1,Scalar(0));for (int i=0;i<SrcImage.rows;i++){原创 2017-03-18 15:54:14 · 5834 阅读 · 0 评论 -
OpenCV 利用滚动条在不缩小的情况下显示大型图片
最近由于项目需要,要在不缩小的情况下显示一张2500*2000大小的图片,找到了一篇博客写的非常好,是邹老师写于2011年的: http://blog.csdn.net/chenyusiyuan/article/details/6565424我正在试着把它翻译成C++风格,用Mat类型,实现后会再发出来原贴代码,简单修改并加上了一些注释,在VS2010上运行成功:// Image_ScrollBa原创 2017-03-10 15:01:39 · 4539 阅读 · 0 评论 -
OpenCV Mat类型与IplImage类型的相互转换
自OpenCV2.x以后,代码风格由C变为C++,同时引进了Mat类型。这使得之前一些优秀的代码案例没办法直接移植,当然可以把代码重新写一遍,全部换成C++风格和Mat类型,但是如果只是测试使用的话,使用类型转换会更为方便。IplImage转Mat直接使用Mat的构造函数,原型如下: Mat(const IplImage* img, bool copyData=false);第一个原创 2017-03-10 09:58:54 · 2938 阅读 · 0 评论 -
OpenCV 内轮廓与外轮廓说明
opencv提供了findContours函数查找轮廓,函数原型为CV_EXPORTS_W void findContours( InputOutputArray image, OutputArrayOfArrays contours,OutputArray hierarchy,int mode,int method, Point offset=Point());其中第四个参数:int型的m原创 2016-12-20 17:00:53 · 18814 阅读 · 1 评论 -
OpenCV copyTo、clone、“=”与拷贝构造函数的区别
opencv中为矩阵复制提供了copyTo函数、clone函数、重载运算符和拷贝构造函数,用法非常简单: Mat srcimage = imread("1.jpg"); Mat firstimage,secondimage,thirdimage; srcimage.copyTo(firstimage); secondimage = srcimage.clon原创 2017-02-28 17:59:49 · 6846 阅读 · 0 评论 -
OpenCV 绘图功能
在利用Opencv处理图像时,我们常常需要利用一些绘图操作用来验证中间结果是否正确,比如画圆,画椭圆,画线,画矩形等功能。下面对常用的绘图函数做个整理,也方便以后自己使用:在说明绘图功能之前,首先介绍绘图时常常用到了两个结构 Point 和 Scalar。Point数据结构表示了由其图像坐标 x 和 y 指定的2D点。可定义为:Point pt;pt.x = 10;pt.y = 8;或者Poi原创 2017-02-21 13:45:29 · 5401 阅读 · 1 评论 -
OpenCV 改变保存图片的名称,批量处理方法
在opencv C++版本中,图像保存输出函数改为imwrite(),其第一个参数是图片输出路径,图片名称和图片格式,比如 imwrite("D:\\save\\test.jpg", mat, compression_params); 其中,保存路径是D盘根目录下的save文件夹(ps:该文件夹必须存在,opencv提供的该API函数没有自动创建文件夹的功能),图片名称为test,格式为jpg格原创 2016-10-21 10:49:53 · 7939 阅读 · 5 评论 -
OpenCV 透视变换
透视变换是将图像从一个视平面投影到另外一个视平面的过程,所以透视变换也被称为投影映射(Projection Mapping)。在图像的仿射变换中需要变换矩阵是一个2x3的两维平面变换矩阵,而透视变换本质上空间立体三维变换,根据其次坐标方差,要把三维坐标投影到另外一个视平面,就需要一个完全不同的变换矩阵M,所以这个是透视变换跟OpenCV中几何仿射变换最大的不同。变换公式为:其中,变换矩阵:可以拆成四原创 2017-02-16 21:53:38 · 11174 阅读 · 5 评论 -
OpenCV 检测二维码并定位
注意:该程序功能是检测二维码,不是识别,只是在图中定出二维码的位置即可原图是这样:如何出现这张图片时,程序需要找到二维码其余图片是这样:程序步骤: 1.图片缩小 2.灰度化,直方图均衡化,对比度增强,滤波 3.otsu阈值分割 4.五次膨胀 5.轮廓查找,如果轮廓满足一下条件,认为可能为二维码区域,像素面积大于60,长短轴之比小于1.3 6.对疑似区域做判断,因为本实验二维码贴在大概中心原创 2017-02-08 00:36:59 · 23736 阅读 · 6 评论 -
OpenCV 应用fitEllipse函数一种异常问题分析
想要实现一个对图像中所有的轮廓画椭圆的功能 代码如下:for(int k = 0; k < (int)threecontours.size(); k++) { RotatedRect rRect = fitEllipse(threecontours.at(k)); double majorAxis = rRect.size.height > rRect.size.width ?原创 2017-01-03 21:29:03 · 2773 阅读 · 3 评论 -
OpenCV 角点检测(三) Shi-Tomasi
Shi-Tomasi算子就像Harrise算子是在Moravec算子的基础上改进得到的一样: http://blog.csdn.net/chaipp0607/article/details/54692818 Shi-Tomasi算子是在Harrise算子的基础上改进的,改进之处在于他们使用了不同的响应函数。原创 2017-01-23 23:33:21 · 2167 阅读 · 0 评论 -
OpenCV 角点检测(二) Harrise
Harrise算子是在Moravec算子的基础上改进得到的,Moravec角点检测算子见链接:http://blog.csdn.net/chaipp0607/article/details/54649235Harrise算子特点Harrise算子将比于Moravec具有更高的时间复杂度,对噪声同样比较敏感,且存在非均匀响应。前者应用更加广泛,且具有不错的检测率。Harrise算子计算步骤 (1).原创 2017-01-23 12:46:05 · 922 阅读 · 0 评论 -
OpenCV 利用hsv颜色空间的车牌底色检测
一个针对车牌颜色分类的小测试,根据hsv颜色空间,遍历像素点后计算在每个颜色下的像素个数,区分蓝,黄,黑,白车牌底色。#include<windows.h>#include<ctime>#include <iostream> #include <stdio.h>#include <string>#include <stdlib.h>#include "opencv2/objdetec原创 2016-12-07 16:20:07 · 7999 阅读 · 2 评论 -
OpenCV 人脸检测级联分类器解读
opencv中的人脸检测使用基于Harr的级联分类和基于LBP的级联分类。 Harr是在2001年,由Viola和Jones等人提出的,它的脸部检测的基本思想是:对于面部正面的大部分区域而言,会有眼睛所在的区域比前额和脸颊更暗,嘴巴应该比脸颊更暗等情况。和这样类似的比较大约有20个,通过这样的比较决定该区域是否为人脸。 LBP是在2006年由Ahonen等人提出的,相比于Harr原创 2017-01-08 16:41:31 · 7127 阅读 · 1 评论 -
OpenCV 删除轮廓的方法(二)
利用vector迭代器(iterator)遍历内容,利用erase()函数删除轮廓,实验设计为小于20的轮廓被删除,为了效果更明显,在阈值分割前不做平滑和滤波的处理,代码如下:#include<iostream> #include <cv.h> #include <highgui.h> #include <cvaux.h> #include <tchar.h> using names原创 2017-01-15 16:12:04 · 11785 阅读 · 2 评论