当前位置: 首页 > 编程日记 > 正文

OpenCV中Mat数据结构使用举例

#include "stdafx.h"

#include <string>
#include <iostream>

#include <opencv2/opencv.hpp>

using namespace std;
using namespace cv;

int _tmain(int argc, _TCHAR* argv[])
{
//创建一个用1+3j填充的 7 x 7 复矩阵-----1
Mat M(7, 7, CV_32FC2, Scalar(1,3));

//现在将 M转换为100 x 60的CV_8UC(15)的矩阵,旧内容将会被释放
M.create(100, 60, CV_8UC(15));//不能为矩阵设置初值

//第 5行,乘以 3,加到第 3 行,
M.row(3) = M.row(3) + M.row (5) * 3;

//现在将第7列复制到第1列, M.col(1) = M.col(7);//这个不能实现,对列操作时要新建一个Mat
Mat M1 = M.col(1);
M.col(7).copyTo(M1);

//创建一种新的 320 x 240 图像-----2
Mat img(Size(320,240), CV_8UC3, Scalar::all(255));

string strWindowName = "ShowImage";

namedWindow(strWindowName, WINDOW_AUTOSIZE);
imshow(strWindowName, img);
waitKey(0);

//选择ROI(region of interest)
Mat roi(img, Rect(10, 10, 100, 100));

//填充 (0,255,0) 的ROI (这是RGB 空间中的绿色),320 x 240 原始图像将被修改
roi = Scalar(0, 255, 0) ;

imshow(strWindowName, img);
waitKey(0);

//获取数组中的子块-----3
Mat A = Mat::eye(10, 10, CV_32S);

//提取 A 的1 (含)到 3 (不包含)列
Mat B = A(Range::all(), Range(1, 3));

//提取 B 的5 (含)到 9 (不包含)行,即 C ~ A(Range(5,9),Range (1,3))
Mat C = B(Range(5, 9), Range::all());

Size size;
Point ofs;

C.locateROI(size, ofs);//使用locateROI() 计算子数组在主容器数组中的相对的位置
cout<<size.width<<" "<<size.height<<" "<<ofs.x<<" "<<ofs.y<<endl;

//快速初始化小矩阵-----4
double m[3][3] = {{1, 2, 3}, {1, 2, 5}, {3, 4, 6}};

Mat M2 = Mat(3, 3, CV_64F, m);//.inv();

Mat E = Mat::eye(4, 4, CV_64F);
cout<<"E = "<<endl<<" "<<E<<endl;

Mat O = Mat::ones(2, 2, CV_32F);
cout<<"O = "<<endl<<" "<<O<<endl;

Mat Z = Mat::zeros(3,3, CV_8UC1);
cout<<"Z = "<<endl<<" "<<Z<<endl;

//IplImage、Mat、CvMat互转-----5
IplImage *img1 = cvLoadImage("aa.jpg", 2 | 4);

Mat mtx(img1);//IplImage *-> Mat,新的Mat类型与原来的IplImage类型共享图像数据,转换只是创建一个Mat矩阵头// or : Mat mtx = img1;

CvMat oldmat = mtx;//Mat-> CvMat //只是创建矩阵头,而没有复制数据,oldmat不用手动释放

CV_Assert((oldmat.cols == img1->width) && (oldmat.rows == img1->height) && (oldmat.data.ptr == (uchar *)img1->imageData) && (oldmat.step == img1->widthStep));

imshow(strWindowName, mtx);
waitKey(0);

cvNamedWindow(strWindowName.c_str(), 0);
cvShowImage(strWindowName.c_str(), &oldmat);
cvWaitKey(0);

IplImage img2 = mtx;//Mat->IplImage //只是创建图像头,而没有复制数据,img2不用手动释放

cvShowImage(strWindowName.c_str(), &img2);
cvWaitKey(0);

Mat mat3(&oldmat);//CvMat->Mat

imshow(strWindowName, mat3);
waitKey(0);

cvDestroyWindow(strWindowName.c_str());
cvReleaseImage(&img1);

//创建 3 x 3 双精度恒等矩阵-----6
Mat M3 = (Mat_ <double>(3,3) <<1,0,0, 0,1,0, 0,0,1);

//访问数组元素-----7
M2.at<double>(0, 0) += 10.f;

double sum = 0;//计算元素和,方法一

for (int i=0; i<M2.rows; i++)
{
const double *Mi = M2.ptr<double>(i) ;

for (int j=0; j<M2.cols; j++)
{
sum += std::max(Mi[j], 0.);
}
}
cout<<sum<<endl;

sum = 0;//计算元素和,方法二

int cols =M2.cols, rows = M2.rows ;

if (M2.isContinuous())
{
cols *= rows;

rows = 1 ;
}

for (int i=0; i<rows; i++)
{
const double *Mi = M2.ptr <double>(i);

for (int j=0; j<cols; j++)
{
sum += std::max(Mi[j], 0.);
}
}
cout<<sum<<endl;

sum = 0;//计算元素和,方法三

MatConstIterator_<double> it = M2.begin<double>(), it_end = M2.end<double>();

for(; it != it_end; ++it)
{
sum += std::max(*it, 0.);
}
cout<<sum<<endl;


return 0;

}

参考文献:

1、 http://blog.csdn.net/giantchen547792075/article/details/7061391

2、 http://blog.csdn.net/giantchen547792075/article/details/7169255

3、 http://blog.csdn.net/giantchen547792075/article/details/7318415

4、 http://blog.sina.com.cn/s/blog_534497fd01015k7z.html

5、 http://blog.csdn.net/wobuaishangdiao/article/details/7754580

6、 http://blog.csdn.net/yang_xian521/article/details/7107786

7、 http://blog.csdn.net/yang_xian521/article/details/7161335

8、 http://blog.csdn.net/caiye917015406/article/details/7791815

相关文章:

贾扬清加盟AI开发者大会!早鸟票抢购正式开启

整理 | 夕颜硬核 AI 技术大会&#xff0c;一年参加一次就够了。9 月 6日-7 日&#xff0c;2019 AI 开发者大会&#xff08;AI ProCon&#xff09;将在北京富力万丽酒店举行&#xff0c;人工领域技术领袖将再次齐聚一堂&#xff0c;探讨过去一年最新的 AI 技术趋势与变化&#x…

基本控件HyperlinkButton控件

HyperlinkButton控件可用来作为超链接按钮&#xff0c;支持页面导航。 若导航到MainPage.xaml&#xff0c;NavigateUri属性指定单击后导航页面的Uri 若导航到网页&#xff0c;必须同时指定TargetName&#xff0c;否则要报错。 <HyperlinkButton Width"200" Heigh…

江湖又现中科大少年班的传说

作者 | ——&#xff0c;夕颜出品 | AI科技大本营&#xff08;ID:rgznai100&#xff09;导读&#xff1a;近日&#xff0c;《日本经济新闻》的一则报道指出&#xff1a;在左右着企业、国家和地区发展的人工智能领域&#xff0c;中科大少年班的人才支撑着中国的发展。中国自动驾…

[JOISC2014]バス通学

[JOISC2014]バス通学 题目大意&#xff1a; 有\(n(n\le10^5)\)个点和\(m(m\le3\times10^5)\)条交通线路。第\(i\)条交通线路可以让你在时间\(x_i\)从\(a_i\)出发&#xff0c;并在\(y_i\)时到达\(b_i\)。\(q(q\le10^5)\)次询问&#xff0c;每次询问若要在时间\(l_i\)到达\(n\)点…

Windows7在Notepad++中配置Python+OpenCV

1、 从http://notepad-plus-plus.org/下载最新的Notepad6.2.1安装&#xff1b; 2、 从http://www.python.org/下载python-2.7.3.msi安装到D:\Python27目录下&#xff0c;并将D:\Python27添加到环境变量Path中&#xff1b; 3、 打开Notepad&#xff0c;按下F5或者运行(R…

virtualenv 在windows下的绿化方法

virtualenv 在windows下的绿化方法测试环境&#xff1a;windows 7 32 en Python 2.7.3setuptools-0.6c11.win32-py2.7virtualenv-1.9.1-with-pip-1.3.11. f:\> virtualenv my2. 编辑 my/Scripts/activate.bat 前几行中设置VIRTUAL_ENV的那条语句&#xff0c;改为set VIRTUA…

当谈论迭代器时,我谈些什么?

作者 | 樱雨楼编辑 | 豌豆花下猫转载自python猫&#xff08;ID:python_cat&#xff09;导语&#xff1a;之前说过&#xff0c;我对于编程语言跟其它学科的融合非常感兴趣&#xff0c;但我还说漏了一点&#xff0c;就是我对于 Python 跟其它编程语言的对比学习&#xff0c;也很感…

Windows7在Eclipse中配置Python+OpenCV

1. 从http://www.oracle.com/technetwork/java/javase/downloads/jdk-7u2-download-1377129.html下载jdk-7u2-windows-i586.exe&#xff0c;安装到D:\ProgramFiles\Java&#xff0c;并将D:\ProgramFiles\Java\jdk1.7.0_02\bin添加到环境变量中&#xff1b; 2. 从…

Pinterest基于AWS规模化使用Apache Kafka的实践经验

在Pinterest&#xff0c;Apache Kafka被用于为实时流应用程序传输数据、记录日志和可视化监控指标。Pinterest的Kafka托管在AWS上&#xff0c;为了实现复制和高可用性&#xff0c;其安装使用了MirrorMaker和DoctorKafka工具。 Pinterest的技术主管Yu Yang写道&#xff0c;Pinte…

Open×××以及其它IP层×××的完全链路层处理的实现

如果Open也能实现传输模式该有多好&#xff0c;如果基于Open实现的产品能仅仅作为一根昂贵的网线串接在用户网络环境&#xff0c;自动捕获感兴趣流量该有多好&#xff1b;如果它能做到只需要配置一个IP即可工作而无需配置任何路由该有多好。我们知道Open是一个用户态的程序&…

Windows 7 64位机上OpenCV2.4.3的编译、安装与配置

1. 从http://sourceforge.net/projects/opencvlibrary/files/opencv-win/2.4.3/下载OpenCV2.4.3&#xff1b; 2. 将OpenCV-2.4.3.exe放到D:\soft\OpenCV2.4.3文件夹下&#xff0c;解压到当前文件夹下&#xff0c;生成一个opencv文件夹&#xff1b; 3. 下载并安…

有望替代卷积神经网络?微软最新研究提基于关系网络的视觉建模

导语&#xff1a;最近两年&#xff0c;自注意力机制、图和关系网络等模型在NLP领域刮起了一阵旋风&#xff0c;基于这些模型的Transformer、BERT、MASS等框架已逐渐成为NLP的主流方法。这些模型在计算机视觉领域是否能同样有用呢&#xff1f;近日&#xff0c;微软亚洲研究院视觉…

Word 2013无法发布文章到博客园

2018年12月12日突然发现word2013无法发布文章到博客园了&#xff0c; 虽然不常发布博客&#xff0c; 但作为一个强迫症患者&#xff0c; 不折腾好了&#xff0c; 吃肉都不香呀&#xff01; 删除之前的账户&#xff0c; 想重新注册&#xff0c; 居然遇到了灰色对话框&#xff01…

1 sec on Large Judge (java): https://github.com/l...

1 sec on Large Judge (java): https://github.com/leoyonn/leetcode/blob/master/src/q029_substring_of_all_words/Solution.java转载于:https://www.cnblogs.com/codingtmd/archive/2013/03/31/5079017.html

性能提升3倍的树莓派4,被爆设计缺陷!

整理 | 屠敏转载自CSDN&#xff08;ID&#xff1a;CSDNnews&#xff09;一直以来&#xff0c;素有世界最小电脑之称的 Raspberry Pi&#xff08;树莓派&#xff09;是一种独特的存在。它不仅只有一块信用卡般的体积&#xff0c;还具备主机电脑所具备的功能&#xff0c;如运行 L…

Windows7 64位机上Emgu CV2.4.2安装与配置

1. 从http://sourceforge.net/projects/emgucv/?sourcedirectory下载最新的Emgu CV2.4.2&#xff1b; 2. 将libemgucv-windows-x86-gpu-2.4.2.1777拷贝到D:\soft\Emgu2.4.2文件夹下&#xff0c;运行此.exe文件&#xff0c;将其安装到D:\soft\Emgu2.4.2\emgucv-wind…

2018年12月,华为HCNP大面积更新题目,军哥独家解题咯

2018年12月&#xff0c;华为HCNP大面积更新题目&#xff0c;乾颐堂军哥独家解题咯2018年是华为认证变动比较大的一年&#xff0c;华为认证走过这几年不得不说是有一定进步的&#xff0c;而且最近华为孟女侠确实让我也小小的骄傲了一把&#xff0c;所以当然希望华为认证能做的更…

关于ProGuard的学习了解(从别处转来)

from&#xff1a;http://www.cnitblog.com/zouzheng/archive/2011/01/12/72639.html在Android项目中用到JNI&#xff0c;当用了proguard后&#xff0c;发现native方法找不到很多变量&#xff0c;原来是被produard优化掉了。所以&#xff0c;在JNI应用中该慎用progurad啊。解决办…

tesseract-ocr3.02字符识别过程操作步骤

1、 从http://code.google.com/p/tesseract-ocr/downloads/list下载tesseract-ocr-3.02-vs2008、tesseract-ocr-3.02.chi_sim.tar、tesseract-ocr-3.02.02.tar、tesseract-ocr-3.02.02-doc-html.tar、leptonica-1.68-win32-lib-include-dirs相关文件&#xff1b; 2、 将所有…

中文repo“霸榜”GitHub Trending,国外开发者不开心了

编译整理 | 一一出品 | AI科技大本营&#xff08;ID:rgznai100&#xff09;近日&#xff0c;一位叫Balazs Saros 的国外开发者在Medium上发表了一篇名为"Chinese repos are ruining the Github trending page"的博文&#xff0c;翻译一下他的意思就是“中文 repo 正在…

使用 electron-updater 自动更新应用

前端工程师可以使用 Electron 非常方便的编写出 PC 端应用&#xff0c;而应用更新的方式也有很多&#xff0c;详细可见更新应用程序。 我的项目是基于 electron-vue 搭建的&#xff0c;构建打包生成安装包&#xff0c;则用的是 electron-builder&#xff0c;所以更新自然选择 e…

struts2请求处理过程源代码分析(1)

2019独角兽企业重金招聘Python工程师标准>>> 转载自&#xff1a;http://www.see-source.com/ 源码解析网 网上对于struts2请求处理流程的讲解还是比较多的&#xff0c;有的还是非常详细的&#xff0c;所以这里我就简单地将大概流程总结下&#xff0c;有了个大概印象…

Ubuntu中C代码静态检查工具Splint的安装配置和使用

1、 从http://www.splint.org/download.html下载splint-3.1.2.src.tgz&#xff0c;存放到/home/spring/Splint文件夹下&#xff1b; 2、 打开终端&#xff1b; 3、 解压缩&#xff1a;tar zxvfsplint-3.1.2.src.tgz 4、 安装到/usr/local/splint目录下&#xff1a; …

Fetch 入门

一、什么是Fetch &#xff1f; Fetch的定义 Fetch本质上是一种标准&#xff0c;该标准定义了请求、响应和绑定的流程。 Fetch标准还定义了Fetch () JavaScript API&#xff0c;它在相当低的抽象级别上公开了大部分网络功能&#xff0c;我们今天讲的主要是Fetch API。Fetch API …

保障数据安全,强调科技向善,旷视发布《人工智能应用准则》

目录 AI应用落地加速 善用科技是关键 《人工智能应用准则》全文 2019年7月17日&#xff0c;旷视正式全文公布基于企业自身管理标准的《人工智能应用准则》&#xff08;以下简称《准则》&#xff09;。《准则》从正当性、人的监督、技术可靠性和安全性、公平和多样性、问责和及…

胜者树和败者树 - qianye0905 - 博客园

胜者树和败者树 - qianye0905 - 博客园胜者树和败者树胜者树和败者树都是完全二叉树&#xff0c;是树形选择排序的一种变型。每个叶子结点相当于一个选手&#xff0c;每个中间结点相当于一场比赛&#xff0c;每一层相当于一轮比赛。不同的是&#xff0c;胜者树的中间结点记录的…

C/C++代码静态检查工具PC-lint在VS2008开发环境中的安装配置和使用

PC-Lint偏重于代码的逻辑分析&#xff0c;它能够发现代码中潜在的错误&#xff0c;比如数组访问越界、内存泄漏、使用未初始化变量等。 1、 从http://download.csdn.net/detail/liuchang5/3005191 下载破解版PC-lint9.0&#xff1b; 2、 解压缩到D:\soft\PC-lint&#xff0c…

k8s使用kube-router网络插件并监控流量状态

简介 kube-router是一个新的k8s的网络插件&#xff0c;使用lvs做服务的代理及负 载均衡&#xff0c;使用iptables来做网络的隔离策略。部署简单&#xff0c;只需要在每个节点部署一个daemonset即可&#xff0c;高性能&#xff0c;易维护。支持pod间通信&#xff0c;以及服务的代…

作业盒子完成1.5亿美元D轮融资,更名“小盒科技”

作者 | 夕颜 导读&#xff1a;2019 年 7 月 18 日&#xff0c;AI 在线教育创企“作业盒子”召开发布会&#xff0c;宣布已于今年 5 月完成 1.5 亿美元 D 轮融资&#xff0c;由阿里巴巴领投。同时&#xff0c;“作业盒子”宣布进行品牌升级&#xff0c;正式更名为“小盒科技”&a…

8500WN流畅高速上网高端卡 12核心不锁倍频

据台湾媒体最新报道&#xff0c;台湾无线网卡厂商最新推出一款大功率80DBI无线网卡-横空出世8500WN集成机。售价约1180新台币(折合人民币约298元) 台湾卡王是全球著名的大功率无线网卡生产厂商&#xff0c;2007年曾最早推出大功率无线网卡8G&#xff0c;以其卓越的品质&#xf…