计算机视觉
文章平均质量分 83
星之河
这个作者很懒,什么都没留下…
展开
-
OpenCV学习笔记 cv.Mat 与 .txt 文件数据的读写操作
1、按OpenCV格式实现的 .txt 文件读写可以用 cvSave 和 cvLoad 实现,格式和 .xml/.yml 的差不多,不过如果专用与 OpenCV 的数据读写,还是用 .xml/.yml 文件格式较好,我比较喜欢 .yml 格式,可读性非常棒。用 cvSave 和 cvLoad 读写 .txt 文件,其实现方式和数据格式与 .yml 文件基本一致。例如:cv转载 2014-08-25 17:36:26 · 2613 阅读 · 0 评论 -
CvMat操作
分配释放矩阵空间综述:OpenCV有针对矩阵操作的C语言函数. 许多其他方法提供了更加方便的C++接口,其效率与OpenCV一样.OpenCV将向量作为1维矩阵处理.矩阵按行存储,每行有4字节的校整.分配矩阵空间:CvMat* cvCreateMat(int rows, int cols, int type); type: 矩阵元素类型. 格式为CV_(S转载 2013-12-10 11:00:34 · 895 阅读 · 0 评论 -
reprojectImageTo3D函数讲解
函数名称:reprojectImageTo3D函数原型:void reprojectImageTo3D(InputArray disparity,OutputArray _3dImage,InputArray Q, bool handleMissingValues=false, int ddepth=-1 )函数作用:根据一组差异图像构建3D空间参数说明:dis转载 2013-11-25 21:57:54 · 10870 阅读 · 1 评论 -
Blob分析
Blob分析(Blob Analysis)是对图像中相同像素的连通域进行分析,该连通域称为Blob。Blob分析可为机器视觉应用提供图像中的斑点的数量、位置、形状和方向,还可以提供相关斑点间的拓扑结构。 Blob翻译成中文,是“一滴”,“一抹”,“一团”,“弄脏”,“弄错”的意思。在计算机视觉中的Blob是指图像中的具有相似颜色、纹理等特征所组成的一块连通区域。显然,Blob分析其转载 2013-09-26 11:44:37 · 2690 阅读 · 0 评论 -
OpenCV中IplImage*转化为cv::mat时出现的问题
最近调试时,需要把工业相机在内存中的图像提取出来做处理,网上的办法是将内存中的图像转化为IplInage*格式,在OpenCV处理中要用到cv::mat格式,这就要有一个转换的问题,一开始参照网上大部分的例子用如下转换:cv::Mat img2(qImg1,0);在实际中img2已经在头文件中定义过一次,按照这样的转换方法,貌似要重新定义一次。而且调试中看这个变量没有转换成原创 2013-09-03 11:47:46 · 3402 阅读 · 0 评论 -
含SDK工业相机与OpenCV作实时处理时问题
在用含有SDK的工业相机时,相机图像在OpenCV中的实时处理是我一直纠结的问题,可以用相机SDK相关函数实现图像保存,如果要处理就要先用OpenCV把图像载入,显然是浪费时间。一开始,认为SDK和OpenCV有着各自的一套数据类型,这该怎么转换呀,上网发现很少有这样问题,我知道这在老手们面前或许连问题都算不上,不过对我们新手来说就是很大问题啦。后来花了几天的时间看SDK的说明文档,又上网看了一些原创 2013-09-03 12:06:42 · 5554 阅读 · 14 评论 -
随机抽样一致性算法(RANSAC)
作者:王先荣 本文翻译自维基百科,英文原文地址是:http://en.wikipedia.org/wiki/ransac,如果您英语不错,建议您直接查看原文。 RANSAC是“RANdom SAmple Consensus(随机抽样一致)”的缩写。它可以从一组包含“局外点”的观测数据集中,通过迭代方式估计数学模型的参数。它是一种不确定的算法——它有一定的概率得出一个合理的结果;转载 2013-09-18 15:24:47 · 1516 阅读 · 0 评论 -
霍夫变换
图像处理之霍夫变换(直线检测算法)霍夫变换是图像变换中的经典手段之一,主要用来从图像中分离出具有某种相同特征的几何形状(如,直线,圆等)。霍夫变换寻找直线与圆的方法相比与其它方法可以更好的减少噪声干扰。经典的霍夫变换常用来检测直线,圆,椭圆等。 霍夫变换算法思想:以直线检测为例,每个像素坐标点经过变换都变成都直线特质有贡献的统一度量,一个简单转载 2013-10-02 15:51:14 · 1449 阅读 · 0 评论 -
Mat - 基本图像容器
OpenCV在2.0版本中引入了一个新的C++接口,利用自动内存管理给出了解决问题的新方法。使用这个方法,你不需要纠结在管理内存上,而且你的代码会变得简洁(少写多得)。但C++接口唯一的不足是当前许多嵌入式开发系统只支持C语言。所以,当目标不是这种开发平台时,没有必要使用 旧 方法 关于 Mat ,首先要知道的是你不必再手动地(1)为其开辟空间(2)在不需要时立即将转载 2013-09-04 17:12:39 · 759 阅读 · 0 评论 -
opencv中C风格和C++风格函数区别
opencv提供了C接口和C++接口,例如加载图像函数C接口为CvLoadImage而C++接口为Imread他们在使用时有什么区别呢? OpenCV提供C接口和C++接口,功能是一样的。选用何种接口,完全取决于个人爱好。 如果你的程序是C风格的,最好选用C接口,如果是C++风格的,最好选用C++接口。 C接口的很多函数需要配对使用,转载 2013-09-04 17:03:58 · 1869 阅读 · 0 评论 -
OpenCV中的匹配算法
有了标定参数,校准的过程就很简单了。我使用的是OpenCV中的cvStereoRectify,得出校准参数之后用cvRemap来校准输入的左右图像。这部分的代码参考的是Learning OpenCV 十二章的例子。 校准之后,就可以立体匹配了。立体匹配OpenCV里面有两种方法,一种是Block Matching,一种是Graph Cut。Block Matching用的是SAD方法,转载 2013-07-01 22:23:12 · 4087 阅读 · 0 评论 -
OpenCV的内存对齐机制
使用OpenCV有一年多时间了,一直以为IplImage结构体中的widthStep元素大小等于width*nChannels,大错特错!查看OpenCV2.1的源码,在src/cxcore/cxarray.cpp文件中,找到cvInitImageHeader函数,函数中对widthStep大小赋值如下:image->widthStep = (((image->width * image-转载 2013-09-03 12:19:12 · 1817 阅读 · 0 评论 -
openCv视频处理
视频处理[编辑]1、从视频流中捕捉一帧画面[编辑](1) OpenCV 支持从摄像头或视频文件(AVI格式)中捕捉帧画面.[编辑](2) 初始化一个摄像头捕捉器:CvCapture* capture = cvCaptureFromCAM(0); // capture from video device #0[编辑](3) 初始化一个视频文件捕捉器:转载 2013-12-16 20:27:37 · 1271 阅读 · 0 评论 -
OpenCV使用中“内存泄露”的探索
戏剧性阶段一:问题的出现 最近在使用opencv的时候,发现在图像函数部分,opencv的内存管理存在一定问题。在使用IplImage的图像cvcloneImage()后,调用cvReleaseImage()时,内存并不能全部释放。在实时视频处理程序中,伴随程序运行,很容易造成系统内存消耗殆尽。举例来说,看下面的一个最简单代码:#include"cv.h"#include转载 2014-01-11 20:54:14 · 988 阅读 · 0 评论 -
OpenCV通过cvFindContours与cvDrawCountours函数查找轮廓
FindContours 在二值图像中寻找轮廓[cpp] view plaincopyint cvFindContours(CvArr* image, CvMemStorage* storage, CvSeq** first_contour,int header_size=sizeof(CvContour), int mode=CV_RETR_LIS转载 2014-07-03 21:21:48 · 1055 阅读 · 0 评论 -
cvContourArea:计算整个或部分轮廓的面积
double cvContourArea( const CvArr* contour, CvSlice slice=CV_WHOLE_SEQ );contour:轮廓(顶点的序列或数组)。slice:感兴趣区轮廓部分的起点和终点,默认计算整个轮廓的面积。函数cvContourArea计算整个或部分轮廓的面积。在计算部分轮廓的情况时,由轮廓弧线和连接两端点的弦围成的区域总面积转载 2014-07-03 21:13:32 · 4517 阅读 · 0 评论 -
cvCountNonZero() opencv
CountNonZero计算非零数组元素个数int cvCountNonZero( const CvArr* arr );arr数组, 必须是单通道数组或者设置COI(感兴趣通道)的多通道图像。函数 cvCountNonZero 返回arr中非零元素的数目:result = sumI arr(I)!=0当IplImage 支持ROI和COI。转载 2014-07-03 20:59:49 · 2328 阅读 · 0 评论 -
视频监控方案与多媒体应用系统介绍 (zz)
视频监控方案与多媒体应用系统介绍 -----------------------------------------------------------------------------------来 源: cmvc.com.cn ---作者: ■ 文 / 中国科学院自动化研究所 陈 龙 WWW.CMVC.COM.CN 中国多媒体视讯 录入日期:2004-12-22转载 2014-05-20 15:44:38 · 2402 阅读 · 0 评论 -
OpenCV中的内存泄露问题
FROM: http://hi.baidu.com/whu_hl/blog/item/ca7dd8d11745b623970a16bc.html在做项目的过程中,使用OpenCV经常会出现一些内存泄露问题,自己编写的程序出现问题还情有可原,但若是库函数调用和使用时出现,却很令我恼火。花了好长时间和实践的经验告诉我应该客服它。下面把一些检测出的问题进行化解。(可能是水平不够,这些函数使用不当转载 2014-04-27 20:13:37 · 2978 阅读 · 0 评论 -
cvCheckContourConvexity
CVAPI(int) cvCheckContourConvexity( const CvArr* contour );该函数用于判断轮廓是否为凸(如果为凸返回值为 1,如果为凹返回0contour为要判断的轮廓指针.轮廓相关函数笔记明显:CvSeq* contours2也属于CvArr*CvRect rect = cvBoundingRect(转载 2014-01-20 10:54:51 · 2718 阅读 · 0 评论 -
cvFindContours函数使用
CV_IMPL intcvFindContours( void* img, CvMemStorage* storage, CvSeq** firstContour, int cntHeaderSize, int mode,转载 2014-01-20 10:48:17 · 1491 阅读 · 0 评论 -
cvApproxPoly的学习
这是一个轮廓的多边形轮廓逼近函数,这个函数用指定精度逼近一个或多个 曲线,并返回逼近结果。一开始觉得这个函数没什么必要,因为如果只是要简单的提取和显示图像轮廓的话只要cvFindContours函数就够了,那么为什么还要这个函数呢?后来百度了下,在opencv论坛上找到了答案。首先,轮廓的多边形逼近指的是:使用多边形来近似表示一个轮廓。其次,多边形逼近的目的是为了减少轮廓的顶点数目。但多边转载 2014-01-20 10:50:59 · 1059 阅读 · 0 评论 -
Opencv 棋盘定位(源码调试2)
刚接触图像处理是从摄像机标定开始,一直好奇opencv程序中是怎么实现棋盘定位的。自己也曾用matlab写过摄像机标定的整个过程,在图像中检测出棋盘的位置是整个标定过程的第一步,但一直不稳定,不知道opencv中采用什么算法检测棋盘的位置。很可惜,网上基本上没有这方面的资料,在opencv原文件中的提示:The algorithms developed and implemented by Vez转载 2014-01-18 11:39:50 · 9283 阅读 · 6 评论 -
ffmpeg教程
概要 电影文件有很多基本的组成部分。首先,文件本身被称为容器Container,容器的类型决定了信息被存放在文件中的位置。AVI和Quicktime就是容器的例子。接着,你有一组流,例如,你经常有的是一个音频流和一个视频流。(一个流只是一种想像出来的词语,用来表示一连串的通过时间来串连的数据元素)。在流中的数据元素被称为帧Frame。每个流是由不同的编码器来编码生成的。编解码器描述了实际的转载 2014-01-12 10:21:13 · 1069 阅读 · 0 评论 -
ffmpeg简介
FFmpeg是一个开源免费跨平台的视频和音频流方案,属于自由软件,采用LGPL或GPL许可证(依据你选择的组件)。它提供了录制、转换以及流化音视频的完整解决方案。它包含了非常先进的音频/视频编解码库libavcodec,为了保证高可移植性和编解码质量,libavcodec里很多codec都是从头开发的。 FFmpeg是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序转载 2014-01-12 10:19:01 · 839 阅读 · 0 评论 -
OpenCV 处理内存中的图像数据
IplImage* iplImage;BYTE* data;内存中的图像数据1 由IplImage*得到BYTE*图像数据:data = iplImage->imageDataOrigin; //未对齐的原始图像数据或者data = iplImage->imageData; //已对齐的图像数据2 由BYTE*得到IplImage*图像数据转载 2013-09-03 12:15:52 · 5713 阅读 · 1 评论 -
Opencv图像显示出现倒立
在使用opencv显示图像时会出现图像倒立的情况,IplImage的origin属性有关系。origin为0表示顶左结构,即图像的原点是左上角,如果为1为左下角。一般从硬盘读入的图片或者通过cvCreateImage方法创建的IplImage图片默认的origin为0,即显示的时候都是正的。而由摄像头或者视频文件获取的帧图像origin为1,此时显示的时候扫描顺序是从下到上,显示也是正的。但是如果转载 2013-09-03 17:11:28 · 992 阅读 · 0 评论 -
Spbel算子及CvSobel(一)
Sobel算子主要用作边缘检测。在技术上,它是一离散性差分算子,用来运算图像亮度函数的梯度之近似值。在图像的任何一点使用此算子,将会产生对应的梯度矢量或是其法矢量。 该算子包含两组3x3的矩阵,分别为横向及纵向,将之与图像作平面卷积,即可分别得出横向及纵向的亮度差分近似值。如果以A代表原始图像,Gx及Gy分别代表经横向及纵向边缘检测的图像,其公式如下:转载 2013-07-09 17:57:17 · 1076 阅读 · 0 评论 -
Sobel算子及cvSobel(二)
由于项目里要用到边缘检测,所以今天研究了一下最简单的梯度的方法。 首先,我们来开一下计算机是如何检测边缘的。以灰度图像为例,它的理论基础是这样的,如果出现一个边缘,那么图像的灰度就会有一定的变化,为了方便假设由黑渐变为白代表一个边界,那么对其灰度分析,在边缘的灰度函数就是一个一次函数y=kx,对其求一阶导数就是其斜率k,就是说边缘的一阶导数是一个常数,而由于非边缘的一阶导数为零,这样转载 2013-07-09 17:13:05 · 1231 阅读 · 0 评论 -
标定中用到的OpenCV函数
FindChessboardCorners 寻找棋盘图的内角点位置 int cvFindChessboardCorners( const void*image, CvSize pattern_size,CvPoint2D32f* corners,int* corner_count=NULL,int flags=CV_CALIB_CB_ADAPTIVE_THRESH转载 2013-05-04 09:49:44 · 1208 阅读 · 0 评论 -
opencv中cvCalibrateCamera2()的函数细解
在标定摄像机的过程中,我们通常是要计算出摄像机的内参数矩阵和畸变系数,以便后来对图像进行校正和重构出图像的三维场景。 在opencv中提供了一个cvCalibrateCamera2()函数,使用该函数,我们可以一次性得到摄像机内参数矩阵,畸变系数,旋转向量和平移矩阵。 在这个函数中,计算内参数矩阵的原理其实是用了张正友的标定算法(如果想了解算法的详细情况,请参考他的《转载 2013-05-04 09:59:35 · 2368 阅读 · 0 评论 -
Matlab与OpenCV在实际应用中的选择问题
有很多朋友在实际应用中对开发工具的选择问题感到困惑,特别是Matlab,OpenCV,C等工具或者语言的取舍问题,在这里我们进行一个简单的小结,供大家参考:1.何时使用Matlab:Matlab是目前世界上最强大的算法处理软件工具之一,可应用于众多科学计算及仿真领域,其强大功能为众多的科学工作者提供了方便快捷的处理方式,对于图像工作者而言,它也是必不可少的工具,对于图像工作者,我认为在转载 2013-05-04 10:06:24 · 2336 阅读 · 1 评论 -
关于张正友标定法的一些注意事项
原文地址:http://bbs.ednchina.com/BLOG_ARTICLE_215351.HTM从一月到现在一直有一个问题比较烦人,就是这相机标定的问题,这个问题使用相机的人基本都会先去做这个,很多人在这问题上做研究,有很多种,基于各种模型的,而且算法都比较成熟。我们一开始就把问题想简单了,因为OPENCV说里面已经写好了,直接掉出来用就行了。实现确实如转载 2013-05-16 17:20:09 · 2526 阅读 · 0 评论 -
OpenCV摄像头采集图像问题及DirectShow的使用
在用OpenCV打开USB摄像头时,分别用两个软件采集图像结果是上面两幅,第一幅我是用OpenCV采集的,第二幅是用别人的软件采集的,感觉颜色上差异好大啊,在OpenCV感觉无法设置摄像头本身的许多属性,造成这样的原因我个人以为是两个软件用不同的库,其默认的采集图像的参数不一样,所以想用DirectShow,据说里面有一些设置属性的东西。安装DirectShow1、下载安装及配置O原创 2013-04-20 10:27:14 · 6789 阅读 · 7 评论 -
OpecCV图像结构
图像深度 是指存储每个像素所用的位数,也用于量度图像的色彩分辨率.图像深度确定彩色图像的每个像素可能有的颜色数,或者确定灰度图像的每个像素可能有的灰度级数.它决定了彩色图像中可出现的最多颜色数,或灰度图像中的最大灰度等级.比如一幅单色图像,若每个象素有8位,则最大灰度数目为2的8次方,即256.一幅彩色图像RGB3个分量的象素位数分别为4,4,2,则最大颜色数目为2的4+4+2次方,原创 2013-04-19 21:15:00 · 1464 阅读 · 0 评论 -
cv::Mat与iplimage类型如何进行互相转换
IplImage -> cv::MatIplImage* pImg = cvLoadImage("lena.jpg");cv::Mat img(pImg,0); // 0是不複製影像,也就是pImg與img的data共用同個記憶體位置,header各自有 cv::Mat -> IplImage// converts header to IplImage; no dat转载 2013-04-26 21:09:48 · 1758 阅读 · 0 评论 -
OpenCV对摄像头分辨率的设置
最近用双目视觉采集图像时得到的是640*480的图片,而我想要的是320*240的通过在网上查阅发现cvSetCaptureProperty函数可以达到我想要的效果:cvSetCaptureProperty(pCapture[0], CV_CAP_PROP_FRAME_WIDTH, 320);cvSetCaptureProperty(pCapture[0], CV_CAP_PROP_FRA原创 2013-04-14 16:34:36 · 5067 阅读 · 0 评论 -
opencv2.4.2在VS2010下的配置
1、下载OpenCV-2.4.2。2、安装OpenCV-2.4.2.3、添加OpenCV的include和lib: 在VS新建一个Win32控制台应用程序(也可以是MFC程序); 在菜单视图中点击属性管理器4、双击属性管理器中的Debug | Win32 5、在属性页—>通用属性—>VC++目录—>包含()目录下加入: C:原创 2013-04-12 18:17:19 · 974 阅读 · 0 评论 -
图像处理常用算法
/*函数名称:MakegGray() *//*函数类型:void *//*功能:真彩色转化成256色灰度图像。 *//**************************转载 2013-07-10 20:48:40 · 806 阅读 · 0 评论 -
图像处理中的梯度、导数如何求?(Robert算子,Sobel算子,Prewitt算子,Laplace算子)
梯度的求法是多种多样的,根据不同的处理需要选择合适的算子(模版)。1、水平垂直差分法2、Robert 梯度算子3、Sobel算子 垂直方向转载 2013-07-10 20:41:44 · 7859 阅读 · 1 评论