前言 因为对图像方面感兴趣,所以有空学学OpenCV的使用,并且希望以此为引子,带领自己入门图像领域. 先post上几个参考网站,上面有完整源码: http://docs.opencv.org/2.4.9/ (英文文档,主要参看) http://www.opencv.org.cn/opencvdoc/2.3.2/html/index.html (低版本的中文参考) https://github.com/opencv/opencv/tree/master/doc/tutorials (github…
opencv中图像的格式Mat 有图像的定义,图像深度.类型格式等,其中Mat的参数depth为深度,深度反应出图像颜色像素值: 关于数据的储存:(转) Mat_<uchar>对应的是CV_8U,Mat_<char>对应的是CV_8S,Mat_<int>对应的是CV_32S,Mat_<float>对应的是CV_32F,Mat_<double>对应的是CV_64F,对应的数据深度如下: • CV_8U - 8-bit unsigned intege…
简介: 在利用opencv进行图像处理时,通常需要批量读取图片,然后做相应的处理,我们可以用C++文件的输入流来进行图片的读取,这要求我们应该事先,将图片图片名生成txt文件,具体请参见之前的博文[ubuntu中获取文件名称并生成txt文件]. 例程: 实现功能,批量读取指定目录下的图片,为了检验是否成功,显示第一张图片的长和宽. #pragma GCC diagnostic error "-std=c++11" #include <opencv2/core/core.hpp&g…
Mat,cvMat和IplImage这三种类型都可以代表和显示图像,但是,Mat类型侧重于计算,数学性较高,openCV对Mat类型的计算也进行了优化.而CvMat和IplImage类型更侧重于“图像”,opencv对其中的图像操作(缩放.单通道提取.图像阈值操作等)进行了优化.在opencv2.0之前,opencv是完全用C实现的,但是,IplImage类型与CvMat类型的关系类似于面向对象中的继承关系.实际上,CvMat之上还有一个更抽象的基类----CvArr,这在源代码中会常见. 最近…
一般来说,如果是遍历数据的话用指针ptr比用at要快.特别是在debug版本下.因为debug中,OpenCV会对at中的坐标检查是否有溢出,这是非常耗时的. 代码如下 #include <opencv2\core\core.hpp> #include <opencv2\highgui\highgui.hpp> #include <iostream> int main() { char *srcName="e://vedio//001.jpg"; c…
留着以后查询: http://blog.csdn.net/augusdi/article/details/8863820 一.Mat类型:矩阵类型,Matrix. 在openCV中,Mat是一个多维的密集数据数组.可以用来处理向量和矩阵.图像.直方图等等常见的多维数据. Mat有3个重要的方法: 1.Mat mat = imread(const String* filename); 读取图像 2.imshow(const string frameName, InputArray mat); 显示…
      有时候为了便于调试算法,我们需要从文本文件或二进制文件中读取数据,并把数据放到相应的矩阵中去.我们通常可以通过下面的函数实现.   1.从二进制文件中读取数据.      新建一个txt文件 input.txt,在vs2010中,右键点击该文件,选择open with,然后选择Binary Editor,就可以用二进制的方式打开文件了. 编辑文件并保存之后,我们可以用下面的函数把数据读入到矩阵中去. int gMophEx::LoadData(string fileName, cv:…
本示例程序主要是通过实例演示高维Mat的寻址方式. //3,4分别表示行数.列数,所以3*4是一个页面的元素数,2表示有2个3*4 ,b=,c=; int size[]={a,b,c}; float* d1=new float[a*b*c]; ;i<a*b*c;i++) d1[i] =(float)i; Mat myND=Mat(,size,CV_32F,d1); cout<<myND.step[]<<endl;//等于size中的3*4 cout<<myND.s…
我们在实际应用中对图像进行的操作,往往并不是将图像作为一个整体进行操作,而是对图像中的所有点或特殊点进行运算,所以遍历图像就显得很重要,如何高效的遍历图像是一个很值得探讨的问题. 一.遍历图像的4种方式:at<typename>(i,j) Mat类提供了一个at的方法用于取得图像上的点,它是一个模板函数,可以取到任何类型的图像上的点.下面我们通过一个图像处理中的实际来说明它的用法. 在实际应用中,我们很多时候需要对图像降色彩,因为256*256*256实在太多了,在图像颜色聚类或彩色直方图时,…
刚刚在vs上装好了QT和Opencv,试一下效果把. 我简单的创建了一个label,然后使用Opencv导入图像,因为Opencv导入图像是MAT格式的,在使用Qt的时候我们要把导入的图像转换成Qimage类型的. 所以,我写了一个转换函数. QImage QtGuiApplication1::cvMat2QImage(const Mat& mat) // Mat 改成 QImage { if (mat.type() == CV_8UC1) // 单通道 { QImage image(mat.c…
我们在使用OpenCV时,有时候需要对现有图片剪裁,比如只需要一个小窗口中的内容,那么我们可以通过OpenCV的兴趣区域 Region of Interest (ROI) 来很轻易的实现,操作也很简单,首先建立一个新的IplImage图片,大小为你需要剪裁出来的大小,然后建立一个该大小的CvRect变量,用来设定原图片的ROI的范围,然后此时拷贝原图片到新图片,就得到我们需要的内容了,最后别忘了把原图片的ROI还原,参见代码如下: IplImage *img = cvLoadImage(); C…
我使用的是海康DS-2CD852MF-E, 200万,网络摄像机,已经比较老了,不过SDK在海康官网下载的,开发流程都差不多. 海康摄像机回调解码后的视频数据格式为YV12,顺便说一下YV12的数据格式   YYYY  V U.   我这个是720P,即1280 * 720分辨率. 那么Y分量的数量为 1280 * 720 = 921600 字节, V = U 数量为Y的1/4, 即921600 / 4 =   230400字节,所以一帧720P的YV12数据量为1382400字节,与断点调试查…
1. YUV420 -> Mat 可用于转换接受到的YUV视频源到OpenCV可以识别的数据 Mat myuv( Frame_Height + Frame_Height / 2, Frame_Width, CV_8UC1, (unsigned char *) YUV420_Image_Buffer); cvtColor(myuv, mgMat, CV_YUV420p2RGB); 2. Mat -> YUV420 可用于OpenCV处理完视频信号后返回 cvtColor(mgMat, myuv,…
学习OpenCV大家都会遇到一个对象叫做Mat,此对象非常神奇,支持各种操作.很多初学者因此被搞得头晕脑胀,它各种用法太多太杂,搞得初学者应接不暇,感觉有心无力.无处下手之感.这里我们首先要正本清源,从Mat对象的产生原因说起,然后再把Mat各种神奇用法一一梳理总结. Mat对象起源: 当OpenCV 1.0发布时候没有Mat对象,是个C语言风格的数据结构IPlImage来表示内存中图像对象,但是OpenCV开发者在做复杂图像处理算法分析与计算时候,创建了很多IplImage这样的数据结构,偶尔…
在opencv的编程中,遍历访问图像元素是经常遇到的操作,掌握其方法非常重要,无论是Mat类的像素访问,还是IplImage结构体的访问的方法,都必须扎实掌握,毕竟,图像处理本质上就是对像素的各种操作,访问元素就是各种图像处理算法的第一步. 首先先看看图像的是怎么存储的. 单通道图像 多通道图像 Mat访问图像元素方法汇总 1.用指针访问元素 在大多数图像处理任务中, 执行计算时你都需要对图像的所有像素进 行扫描. 当需要访问的像素数量非常庞大, 你必须采用高效的方式 来执行这个任务来提高效率.…
CUDA用于并行计算非常方便,但是GPU与CPU之间的交互,比如传递参数等相对麻烦一些.在写CUDA核函数的时候形参往往会有很多个,动辄达到10-20个,如果能够在CPU中提前把数据组织好,比如使用二维数组,这样能够省去很多参数,在核函数中可以使用二维数组那样去取数据简化代码结构.当然使用二维数据会增加GPU内存的访问次数,不可避免会影响效率,这个不是今天讨论的重点了. 举两个代码栗子来说明二维数组在CUDA中的使用(亲测可用): 1. 普通二维数组示例: 输入:二维数组A(8行4列) 输出:二…
在opencv的编程中,遍历访问图像元素是经常遇到的操作,掌握其方法非常重要,无论是Mat类的像素访问,还是IplImage结构体的访问的方法,都必须扎实掌握,毕竟,图像处理本质上就是对像素的各种操作,访问元素就是各种图像处理算法的第一步. 首先先看看图像的是怎么存储的. 单通道图像 多通道图像 Mat访问图像元素方法汇总 1.用指针访问元素 在大多数图像处理任务中, 执行计算时你都需要对图像的所有像素进行扫描. 当需要访问的像素数量非常庞大, 你必须采用高效的方式来执行这个任务来提高效率. 如…
opencv3中图形存储基本为Mat格式,如果我们想获取像素点的灰度值或者RGB值,可以通过image.at<uchar>(i,j)的方式轻松获取. Mat类中的at方法对于获取图像矩阵某点的RGB值或者改变某点的值很方便,对于单通道的图像,则可以使用: image.at<uchar>(i, j) 其中有一个要注意的地方是i对应的是点的y坐标,j对应的是点的x坐标,而不是我们习惯的(x,y) 来获取或改变该点的值,而RGB通道的则可以使用: image.at<Vec3b>…
部分内容转自:OpenCV Tuturial,ggicci 在OpenCV Tuturial中可查看Mat的初始化与打印方法. Mat本质上是由两个数据部分组成的类: 矩阵头(包含矩阵尺寸,存储方法,存储地址等信息) 一个指向存储所有像素值的矩阵(根据所选存储方法的不同矩阵可以是不同的维数)的指针 OpenCV使用引用计数机制.其思路是让每个 Mat 对象有自己的信息头,但共享同一个矩阵.这通过让矩阵指针指向同一地址而实现.而拷贝构造函数则 只拷贝信息头和矩阵指针 ,而不拷贝矩阵. 特性 ref…
项目用到opencv 融合图片的功能,经过一天的调试,达到预期目标,先将如何调用opencv库实现YUV42与Mat互转记录下来. 一.下载opencv编译的库下载地址是:http://opencv.org/releases.html ,根据需要选择相应的版本,我们项目中用到的版本是2.4.13. 二.下载Eigen库,下载地址是:http://eigen.tuxfamily.org/index.php?title=Main_Page,将Eigen库解压到本地,引用opencv库是要用到 Eig…
本系列文章由 @YhL_Leo 出品,转载请注明出处. 文章链接: http://blog.csdn.net/yhl_leo/article/details/47683127 本文主要介绍Opencv常用的三种Mat类型:Mat,Mat_,Matx. 1. Mat 1.1 创建与初始化 int rows = 3, cols = 1; cv::Size size(cols, rows); /* first method */ cv::Mat myMat( rows, cols, CV_8UC1,…
Mat对象:图像文件的内存数据对象 读取为 Mat 对象 读取图像位Mat对象,获取图像的相关信息 #include <opencv2/opencv.hpp> #include <iostream> using namespace cv; using namespace std; int main(int argc, char** argv) { Mat src = imread("f:/temp/images/lena.jpg", IMREAD_GRAYSCA…
目录 Opencv3 当前模块 OpenCV 贡献库(opencv_contrib) OpenCV 头文件 旧式C风格头文件 新式C++风格头文件 例程 DEMO1 - 显示图片 DEMO2 - 视频 用于从磁盘中播放视频 DEMO3 - 将轨迹栏滑块添加到基本查看器窗口,以便在视频文件中移动 DEMO4 - 在图像显示在屏幕上之前加载并平滑图像 DEMO5 - 使用pyrDown()创建一个新的图像,该图像是输入图像宽度和高度的一半 DEMO6 - Canny边缘检测器将其输出写入单通道(灰度…
OpenCV2.4.13编译(VS2015) 这里给出已经编译好的的下载路径.包括Win64的debug和release版本. OpenCV for MSVC14 Win64 1.下载OpenCV源码 这里不啰嗦了,直接给出下载链接. OpenCV for windows 这个是windows版的下载链接,下载之后进行解压. 进入sources目录,这就是OpenCV的源码目录. 2.使用CMake生成VS工程 在源码目录里面新建一个目录build_msvc14,然后进入这个目录. 打开命令行窗…
今天依照网上的教程尝试了一下最基本的图片显示. 首先想说一下编译时出现的问题,开始时在编译时会出现无法识别cvReleaseImage的情况,是因为没有在配置中包含相应的core的库文件. 加进去就解决这个问题了. 另一个问题是在编译通过以后提示程序拒绝访问,经网上查找好像和英雄联盟有关..貌似是LOL关闭了什么调试功能,总之重启一下电脑就好了. 最后放上相应代码: #include <iostream> //#include <opencv/cv.h> //#include &l…
一.工具篇 工欲善其事,必先利其器.学习OpenCV,肯定少不于基本的编程工具与OpenCV库.在Windows平台下你可以选择Visual Studio.CodeBlock等,当然你也可以选择在Linux平台,用VI.codeBlock都是可以的.编程平台的选择看个人爱好以及项目的开发环境.然后是OpenCV库,你可以在这里下载到最新的版本:http://opencv.org/,最近的版本已经到了2.4.7,但是OpenCV2.0以上版本差别都不算太大.关于怎么安装OpenCV,本文就不再详说…
在MacOS和iOS系统中使用OpenCV 前言 OpenCV 是一个开源的跨平台计算机视觉库,实现了图像处理和计算机视觉方面的很多通用算法. 最近试着在 MacOS 和 iOS 上使用 OpenCV,发现网上关于在 MacOS 和 iOS 上搭建 OpenCV 的资料很少.好不容易搜到些资料,却发现由于 OpenCV 和 Xcode 的版本更新,变得不再有用了.有些问题费了我很多时间,在此总结分享给大家,希望后来人少走些弯路. 可以预见到,随着 Xcode 和 OpenCV 的版本更新,本文可…
http://docs.opencv.org/2.4.13/ Basis 矩形 "modules/core/src/drawing.cpp" CV_IMPL void cvRectangle( CvArr* _img, CvPoint pt1, CvPoint pt2, CvScalar color, int thickness, int line_type, int shift ) { cv::Mat img = cv::cvarrToMat(_img); cv::rectangle…
使用Stitcher类,通过createDefault()方法创建拼接对象,通过stitch()方法执行默认的自动拼接.自动拼接和07年Brown和Lowe发表的论文描述的步骤基本一致,只不过使用的特征提取算法是ORB,而不是慢吞吞.有专利保护的SIFT和SURF.开源万岁! 代码内容:设置几张图片,扔到向量里面,然后计算全景图. opencv-3.0.0源码中没有找到测试图片,很蛋碎.到github上找了下,发现都在[https://github.com/Itseez/opencv_extra…
实验基础 本次实验通过一个简短的例子,主要来说明下面4个问题: 1. 坐标体系中的零点坐标为图片的左上角,X轴为图像矩形的上面那条水平线:Y轴为图像矩形左边的那条垂直线.该坐标体系在诸如结构体Mat,Rect,Point中都是适用的.(OpenCV中有些数据结构的坐标原点是在图片的左下角,可以设置的). 2. 在使用image.at<TP>(x1, x2)来访问图像中点的值的时候,x1并不是图片中对应点的x轴坐标,而是图片中对应点的y坐标.因此其访问的结果其实是访问image图像中的Point…