Opencv Mat的操作
cout << mat 有错误的原因
You are using OpenCV built with VS10. The ostream operator << in the DLL is using the operator from VC 10 Runtime. While you are calling the ostream operator << from VC 11 Runtime. The DLLs are conflicting
template T& Mat::at(int i) const 必须在编译期确定参数T
#include <opencv2/opencv.hpp>
#include <iostream>
#include <iomanip>
using namespace std;
using namespace cv;
void print(Mat mat, int prec)
{
cout << "[" << endl;
for (int i = 0; i < mat.size().height; i++)
{
for (int j = 0; j < mat.size().width; j++)
{
cout << setprecision(prec) << mat.at<float>(i, j);
if (j != mat.size().width - 1)
cout << ", ";
else
cout << endl;
}
}
cout << "]" << endl;
}
int main()
{
float array[] = { 1,2,3 };
float array1[] = { 2,3,1 };
//用数组初始化Mat
Mat mat = Mat(1, 3, CV_32F, array);
Mat mat1 = Mat(1, 3, CV_32F, array1);
Mat tempmat;
//对mat拷贝
mat.copyTo(tempmat);
print(tempmat,5);
//选择roi,rect的四个参数分别是(x,y)坐标,第三个参数是宽度,第四个参数是高度
Mat roi(mat, Rect(0, 0, 2, 1));
print(roi,5);
//mat-mat1的1范数
cout << norm(mat, mat1, CV_L1) << endl;
//mat-mat1的2范数
cout << norm(mat, mat1, CV_L2) << endl;
//打印mat的内容
print(mat ,5);
//创建对角为1的矩阵
Mat eyemat = Mat::eye(4, 4, CV_32F);
print(eyemat,5 );
//提取eyemat的0-1行,2-3列
Mat submat = eyemat(Range(0, 2), Range(2, 4));
print(submat,5);
//abs(),max(),min(),+,-,*,/等操作很简单,就不写了
float a[2][2] = { 2,3,1,2 };
float b[2][2] = { 2,1,0,-1 };
Mat amat(2, 2, CV_32F, a);
Mat bmat(2, 2, CV_32F, b);
print( amat ,5);
print( bmat,5);
//求amat的逆
print( amat.inv(),5);
//两矩阵相乘
print( amat.mul(bmat),5 );
print(amat.mul(6), 5);
//生成一个值为0的矩阵
print( Mat::zeros(3, 3, CV_32F),5 );
//生成一个值为1的矩阵
print( Mat::ones(3, 3, CV_32F) ,5);
system("pause");
}
Opencv Mat的操作的更多相关文章
- opencv Mat 像素操作
1 cv::Mat cv::Mat是一个n维矩阵类,声明在<opencv2/core/core.hpp>中. class CV_EXPORTS Mat { public: //a lo ...
- opencv MAT数据操作
1.存取单个像素值 最通常的方法就是 img.at<uchar>(i,j) = 255; img.at<Vec3b>(i,j)[0] = 255; 2.用指针扫描一幅图像 对于 ...
- Opencv Mat矩阵操作注意事项
矩阵操作通常不会进行元素复制,应注意: Mat a=Mat(100,100,CV_32S); Mat b=Mat(100,100,CV_32S); b=a.col(8);//此时并未进行元素赋值,而只 ...
- Visual Studio 控制台应用程序 同时使用OpenCV和matlab mat文件操作
matalb具有灵活的图像处理,代码编写起来简洁而高效.而OpenCV具有很多成熟的计算机视觉算法,能够处理很多实时的识别处理等问题,而且代码运行起来效率很高.所以如何结合两者之间的优点,是让很多学术 ...
- OpenCV MAT基本图像容器
参考博客: OpenCv中cv::Mat和IplImage,CvMat之间的转换 Mat - 基本图像容器 Mat类型较CvMat和IplImage有更强的矩阵运算能力,支持常见的矩阵运算(参照Mat ...
- 如何用OpenCV跟踪鼠标操作
转载:如何用OpenCV跟踪鼠标操作 http://blog.skyoung.org/2014/05/01/how-to-track-mouse/ 在视频第一帧手动标记出目标的位置是在线视觉跟踪中最基 ...
- [OpenCV]Mat类详解
http://blog.csdn.net/yang_xian521/article/details/7107786 Preface Mat:Matrix Mat类可以被看做是opencv中C++版本的 ...
- [opencv]常用阵列操作函数总结
/*=========================================================================*/ // 阵列操作 /*============ ...
- MAT文件操作
o李YZo 原文 MAT文件打开方法汇总及其他操作 MAT文件简介 为MATLAB使用的一种特有的二进制数据文件.MAT文件可以包含一个或者多个MATLAB 变量.MATLAB通常采用MAT文件把工作 ...
随机推荐
- linux高可用集群(HA)原理详解(转载)
一.什么是高可用集群 高可用集群就是当某一个节点或服务器发生故障时,另一个 节点能够自动且立即向外提供服务,即将有故障节点上的资源转移到另一个节点上去,这样另一个节点有了资源既可以向外提供服务.高可用 ...
- Shell学习笔记 - 运算符
一.Declare命令 1. 命令格式 declare [+/-] [选项] 变量名 其中: -: 给变量设定类型属性 +:取消变量的类型属性 2. 参数说明 -i:将变量声明为整型 -a:将变量声明 ...
- template和templateUrl区别与联系
templateUrl其实根template功能是一样的,只不过templateUrl加载一个html文件,template后面根的是html的标签. .state('menu.about', { u ...
- MapReduce按照两个字段对数据进行排序
按照k2排序,要求k2必须是可以比较的,即必须实现WritableComparable接口. 但是如果还想让别的字段(比如v2中的一些字段)参与排序怎么办? 需要重新定义k2....把需要参与排序的字 ...
- Radware中APPDirector系列的Farm Table中的session mode参数说明
Session mode中共有5种会话保持方式:1.Regular,是普通的会话保持,形成的表项是:Client ip+Server ip的形式2.EntryPerSession(EPS),是端口与i ...
- Mac下批量打包
两种方式: 第一种:有源码 这种方式比较 简单.利用ant打包.直接shell脚本修改 配置渠道号的文件.我们目前是用的umeng的.在AndroidManifest.xml里.提供一个简单的修改渠道 ...
- css禁止双击dom节点被选中user-select:none
css禁止dom节点被选中: 当某个dom节点在快速重复点击的时候出现这个节点被选中,有时候其实并不希望出现这种情况,比如我们使用一个span或者a标签做为按钮dom元素的时候,快速双击这个按钮,就 ...
- 从零单排Linux – 1 – 简单命令
从零单排Linux – 1 – 简单命令 Posted in: Linux 从零单排Linux – 1 一.Linux的简单命令: 1.忘记root密码: 读秒时按任意键进入 – e – ↓选择第二个 ...
- Animated App Boot Example : Fastest animation at app boot time
This iPhone app shows how to create an animation that is displayed when the app starts. The animatio ...
- MVC5----用户登陆及验证码
随便写写记录一下学习的过程 登陆 Models中添加添加 public class LoginViewModel { [Required(ErrorMessage = "*")] ...