当前位置: 首页 > news >正文

网站建设 数据库一起做网店网站特点

网站建设 数据库,一起做网店网站特点,百度网盘下载电脑版官方下载,网络营销策略分析论文转自#xff1a;http://blog.skyoung.org/2014/03/26/OpenCV(III)-How-to-use-Mat/ Mat类是OpenCV最基本的一个数据类型#xff0c;它可以表示一个多维的多通道的数组。Mat常用来存储图像#xff0c;包括单通道二维数组——灰度图#xff0c;多通道二维数组——彩色图。当然… 转自http://blog.skyoung.org/2014/03/26/OpenCV(III)-How-to-use-Mat/ Mat类是OpenCV最基本的一个数据类型它可以表示一个多维的多通道的数组。Mat常用来存储图像包括单通道二维数组——灰度图多通道二维数组——彩色图。当然也可以用来存储点云直方图等等对于高维的数组可以考虑存储在SparseMat中。对于一个Mat对象M其数据布局是由M.step[]决定的数据存放在M.data里面假设M有d维则数据的寻址方式为 addr(Mi0,...,id−1)M.datai0∗M.step[0]...id−1∗M.step[d−1]addr(Mi0,...,id−1)M.datai0∗M.step[0]...id−1∗M.step[d−1]例如ImgImg是一个二维三通道矩阵则 addr(Imgi0,i1)M.datai0∗M.step[0]i1∗M.step[1]addr(Imgi0,i1)M.datai0∗M.step[0]i1∗M.step[1]这里需要说明的是各个维度的步长满足如下关系M.step[i] M.step[i1]*M.size[i1],也就是二维数组的数据的存放是一行一行的三维数组数据存放是一面一面的。 下面给出OpenCV中Mat类的一个粗略定义如下 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27class CV_EXPORTS Mat { public:// ... a lot of methods ....../*! includes several bit-fields:- the magic signature- continuity flag- depth- number of channels*/int flags;//! the array dimensionality, 2int dims;//! the number of rows and columns or (-1, -1) when the array has more than 2 dimensionsint rows, cols;//! pointer to the datauchar* data;//! pointer to the reference counter;// when array points to user-allocated data, the pointer is NULLint* refcount;// other members... };构造Mat的方法 构造Mat的方式有很多种下面把常用的方法一一列出 使用构造函数Mat(nrows, ncols, type[, fillValue]),例如, 1 2// 构建3×2的4通道8位矩阵每个元素初始值为1,2,3,4 Mat M(3,2,CV_8UC4,Scalar(1,2,3,4));使用M.create(nrows,ncols,type)例如 1 2//构建100×100的10通道8位矩阵 M.create(100,100,CV_8UC(10))构建多维的矩阵 1 2 3//构建一个100×100×100的8位三维矩阵 int sz[] {100,100,100} Mat Cube(3, sz, CV_32F, Scalar::all(0))使用复制构造函数或者赋值操作符 1 2Mat A(B); Mat C B;单独对矩阵的某一行某一列进行操作 1 2 3 4 5 6//第4行加上第6行的3倍赋值给第4行 M.row(3) M.row(3) M.row(5)*3;// 把第8列拷贝到第2列通过 M.col(1) M.col(7)是不起作用的应该: Mat M1 M.col(1); M.col(7).copyTo(M1);构建矩阵的ROI区域单独操作ROI区域的值 1 2 3Mat img(Size(320,240),CV_8UC3); Mat roi(img, Rect(10,10,100,100)); roi Scalar(0,255,0);确定矩阵在原矩阵中的相对位置使用locateROI 1 2 3 4 5 6Mat A Mat::eye(10, 10, CV_32S); Mat B A(Range::all(), Range(1, 3)); Mat C B(Range(5, 9), Range::all()); Size size; Point ofs; //得出ofs为1,5size为10,10为什么是10,10目前没搞清楚 C.locateROI(size, ofs);对于外部数据输入进行初始化 1 2 3 4 5 6 7 8 9 10//外部输入一个一维数组 void process_video_frame(const unsigned char* pixels, int width, int height, int step) {Mat img(height, width, CV_8UC3, pixels, step);GaussianBlur(img, img, Size(7,7), 1.5, 1.5); }//用二维数组初始化矩阵 double m[2][3] { {1, 2, 3}, {4, 5, 6} }; Mat M Mat(2, 3, CV_64F, m);IplImageCvMat和Mat相互转换 1 2 3 4 5IplImage* img cvLoadImage(lena.jpg, 1); Mat mtx(img); // IplImage* - Mat IplImage* img1 mtx; //Mat - IplImage* CvMat oldmat mtx; // Mat - CvMat Mat mtx1(oldmat); //CvMat - Mat类似Matlab方式和赋值 1 2 3 4 5 6 7//类似Matlab中的单位矩阵等 M Mat::ones(10, 10, CV_64F); M Mat::eye(10, 10, CV_64F); M Mat::zeros(10, 10, CV_64F);//使用Mat_和配合 Mat M (Mat_double(3,3) 1, 0, 0, 0, 1, 0, 0, 0, 1);获取Mat元素的方法 构造好矩阵后剩下一个很重要的事情就是如何快速准确的获取矩阵Mat中的元素下面列出几种常用的获取Mat中的元素方法 使用M.at(i,j) 1M.atdouble(i,j)对于二维矩阵可以采取逐行获取的方式 1 2 3 4 5 6 7double sum0; for(int i 0; i M.rows; i) {const double* Mi M.ptrdouble(i);for(int j 0; j M.cols; j)sum std::max(Mi[j], 0.); }对于不在乎矩阵的形状只是简单的遍历矩阵的元素的可以采用更快速的方法,首先检查元素排列是否连续如果是可以看成一个一维数组访问。 1 2 3 4 5 6 7 8 9 10 11 12 13double sum0; int cols M.cols, rows M.rows; if(M.isContinuous()) {cols * rows;rows 1; } for(int i 0; i rows; i) {const double* Mi M.ptrdouble(i);for(int j 0; j cols; j)sum std::max(Mi[j], 0.); }仿照STL中使用迭代器访问 1 2 3 4double sum0;MatConstIterator_double it M.begindouble(), it_end M.enddouble();for(; it ! it_end; it)sum std::max(*it, 0.);这个矩阵的迭代器可以传给STL的算法例如std::sort()。 Mat提供的常用成员函数 赋值操作符’’ 除了普通的矩阵赋值外如果一个Scalar赋值给一个Mat,则表示把Mat的所有元素赋值为这个Scalar值。 矩阵的取行列及对角线操作 A.row(i)A.col(j)这些操作返回矩阵A的第i行和第j列。A.rowRange(m,n)和A.colRange(m,n)分别取的是A的第m行到第n行包括m行不包括n行和A的第m列到第n列包括m列不包括n列。这里需要注意一个问题,对于 1A.row(i) A.row(j)这一操作并不能把第j行复制到第i行因为A.row()返回的只是矩阵的头以上操作仅仅相当于两个指针的操作所指内存其实是没有发生变化的。如果想把第j行复制到第i行可以 1A.row(j).copyTo(A(i))当右边的矩阵发生操作后是可以赋值的比如 1 2A.row(i) A.row(j)*a A.row(i) A.row(j) Scalar(0,0,0);A.diag(i)取的是矩阵的对角线这里i0代表最中间的对角线i1是偏右上一行的对角线i-1是左下一行的对角线例如: 1 2 3Mat A (Mat_float(3,3) 1,9,3,7,5,0,7,3,9);A.diag(0)取得是{1,5,9}A.diag(1)取得是{9,0}A.diag(-1)取得是{7,3}。 复制函数 1 2 3A.clone()//返回A的拷贝。 A.copyTo(B)//执行把A拷贝到B矩阵中。 A.copyTo(B,mask)//进拷贝mask对应的部分转换矩阵元素的数据类型 1 2A.converTo(B,tpye,scale)//把A的类型转换为type并且按照scale缩放A到B矩阵中 assignTo(A,type)//更改A的元素数据类型设定矩阵的值 1A.setTo(s)//把A中所有的值赋值为s更改矩阵的通道数和行数 A.reshape()改变通道数A.resize()改变行数。其中A.reshape()这个操作不改变roscolschannels的个数仅仅相当于重构这些元素例如 1 2 3vectorPoint vec;//vec是N个Point Mat pointMat Mat(vec); //pointMat是一个三通道的N×1的矩阵 pointMat.reshape(1)//pointMat变为一个单通道N×3的矩阵更改矩阵的行数如下 1A.resize(sz) //A变为sz行locateROI和adjustROI 这两个函数主要是对submatrix的操作即通过A.row(),A(Range(i,j),Range::all())等操作获得的submatrix在原始矩阵中位置。例如 1 2 3 4 5 6 7 8 9 10 11 12 13 14Mat A (Mat_float(3,3) 1,9,3,7,5,0,7,3,9); Mat B A(Range(0,2),Range(1,3));//B变为 {9,3,// 5,0} Size sz; Point p1; B.locateROI(sz, p1); coutsz p1endl; //sz是原矩阵的大小3×3,p1是B在A中位置(1,0) B.adjustROI(0,1,0,0); //四个参数分别是上下左右平移的像素数这里是把B向下平移1行//最后得出B为{9,3,// 5,0// 3,9} coutBendl;Mat的各项属性 1 2 3 4 5 6 7 8 9 10 11 12A.total() //元素的个数 A.elemSize() //元素的大小如果是8UC3的话返回3*sizeof(uchar) A.elemSize1() //如果是8UC3的话返回sizeof(uchar) A.type() //元素的数据类型 A.depth()//元素的位数 A.channels()//矩阵的通道数 A.step1() //矩阵的每一行元素的个数A.step/A.elemSize1 A.size() //矩阵的尺寸 //注意以下是成员变量不是成员函数 A.step //矩阵的一行的字节数 A.rows //矩阵的行数即高 A.cols //矩阵的列数即宽总结 Mat提供了关于矩阵的一些基本操作这对图像的操作打下了坚实的基础更多复杂的算法都是基于这些操作实现的
http://www.zqtcl.cn/news/108841/

相关文章:

  • 外链网站推荐几个html5标准网站建设
  • 博星卓越营销网站设计古镇镇建网站公司
  • 3. 是网站建设的重点网站后台添加关键词
  • 免费手机网站模板下载百度网站建设北京
  • 爱用建站建设网站的报告
  • 网站关键字被百度收录网站开发asp.net
  • 内部卷网站怎么做的h5在线编辑器
  • 搞定设计网站做的图怎么下载不了网站死链接怎么删除
  • 济南企业建站怎么样在pc端预览手机网站
  • c 手机网站开发模板最好的建站网站
  • 防城港市网站建设成功网站建设案例
  • 成都公司网站制作公司实验一 电子商务网站建设与维护
  • 即墨区城乡建设局网站300m空间够用吗 wordpress
  • 成都软件开发培训机构7个湖北seo网站推广策略
  • 嘉定企业网站建设深圳网站制作费用
  • 外贸网站有必要吗wordpress远程保存图片
  • 苏州吴中网站建设wordpress中文版安装教程
  • wordpress 网站静态页面赶集网网站建设分析
  • 伊春网站开发大型网站建设兴田德润专业
  • 温州平阳县营销型网站建设榆林做网站
  • 沽源网站建设娄底网站建设工作室
  • 商场网站 策划医疗网站是否全部需要前置备案
  • 电商网站开发实训心得wordpress网络验证
  • 美图网seo 优化技术难度大吗
  • 知名的传媒行业网站开发天空网站开发者
  • 网站域名年费多少钱二手手表交易平台哪个好
  • 用易语言做抢购网站软件下载自己可以做企业网站吗
  • 公司网站续费帐怎么做互联网专业
  • 网站开发公司深圳外贸营销策略
  • 主要搜索引擎网站搜索结果比较wordpress novelist