opencv中Mat数据类型的应用
2016-12-23 13:44
441 查看
1.初始化
1) cv::Mat M(3,4,CV_32F,cv::Scalar(0));
2) Mat mat = Mat::zeros(color.rows,color.cols,CV_8UC3); //ones
3) unsigned char* data;
cv::Mat img(height, width, CV_8UC3,
(unsigned char*)data);
2.数据访问
http://blog.csdn.net/xiaowei_cqu/article/details/7771760 http://blog.csdn.net/xiaowei_cqu/article/details/19839019
1) 彩色图像(3维的)
unsigned char* data;
Mat mat(height,width,CV_8UC3);
for (int row=0; row<height; row++)//Vec3d
{
for(int col=0; col<width; col++)
{
for(int k=0; k<3; k++)
{
mat.at<Vec3b>(row,col)[2-k] = data[i++];
}
}
}
2)[b]灰度图像(1维的)[/b]
unsigned char* data;
Mat mat(height,width,CV_8UC3);
for (int row=0; row<height; row++)//Vec3d
{
for(int col=0; col<width; col++)
{
for(int k=0; k<3; k++)
{
mat.at<uchar>(row,col)= data[i++];
}
}
}
3.复制整副图像、区域图像数据
1). 整副
mat.copyTo(frame); //frame = mat;
拷贝[b]mat的数据区到frame中,在拷贝数据前会有一步:frame.create(this->size , this->type)
[/b]
Mat frame = mat.clone(); //frame = mat
完全拷贝,把[b]mat中的所有信息拷贝到frame中
[/b]
2)区域
1) Mat mat = image(roi);
4. 拷贝时指定行列
//cv::Mat R(3,3,CV_32FC1); //有数据的
//cv::Mat T(3,1,CV_32FC1);
cv::Mat M(3,4,CV_32FC1);
[b]1)[/b]
R.copyTo(M.rowRange(0,3).colRange(0,3)); //R的3行3列数据拷贝到M对应的3行3列中, rowRange(0,3) ——0、1、2行
T.copyTo(M.rowRange(0,3).col(3));//3*1
2)
R = M.rowRange(0,3).colRange(0,3); //与1)刚好相反
T = M.rowRange(0,3).col(3);//3*1
5) 格式转换
Mat img1(640,480, CV_8UC1);
img.convertTo(img1, CV_8UC1); //将img转换到cv_8UC1格式
1) cv::Mat M(3,4,CV_32F,cv::Scalar(0));
2) Mat mat = Mat::zeros(color.rows,color.cols,CV_8UC3); //ones
3) unsigned char* data;
cv::Mat img(height, width, CV_8UC3,
(unsigned char*)data);
2.数据访问
http://blog.csdn.net/xiaowei_cqu/article/details/7771760 http://blog.csdn.net/xiaowei_cqu/article/details/19839019
1) 彩色图像(3维的)
unsigned char* data;
Mat mat(height,width,CV_8UC3);
for (int row=0; row<height; row++)//Vec3d
{
for(int col=0; col<width; col++)
{
for(int k=0; k<3; k++)
{
mat.at<Vec3b>(row,col)[2-k] = data[i++];
}
}
}
2)[b]灰度图像(1维的)[/b]
unsigned char* data;
Mat mat(height,width,CV_8UC3);
for (int row=0; row<height; row++)//Vec3d
{
for(int col=0; col<width; col++)
{
for(int k=0; k<3; k++)
{
mat.at<uchar>(row,col)= data[i++];
}
}
}
3.复制整副图像、区域图像数据
1). 整副
mat.copyTo(frame); //frame = mat;
拷贝[b]mat的数据区到frame中,在拷贝数据前会有一步:frame.create(this->size , this->type)
[/b]
Mat frame = mat.clone(); //frame = mat
完全拷贝,把[b]mat中的所有信息拷贝到frame中
[/b]
2)区域
1) Mat mat = image(roi);
4. 拷贝时指定行列
//cv::Mat R(3,3,CV_32FC1); //有数据的
//cv::Mat T(3,1,CV_32FC1);
cv::Mat M(3,4,CV_32FC1);
[b]1)[/b]
R.copyTo(M.rowRange(0,3).colRange(0,3)); //R的3行3列数据拷贝到M对应的3行3列中, rowRange(0,3) ——0、1、2行
T.copyTo(M.rowRange(0,3).col(3));//3*1
2)
R = M.rowRange(0,3).colRange(0,3); //与1)刚好相反
T = M.rowRange(0,3).col(3);//3*1
5) 格式转换
Mat img1(640,480, CV_8UC1);
img.convertTo(img1, CV_8UC1); //将img转换到cv_8UC1格式
相关文章推荐
- Docker on Windows初体验
- Ubuntu系统Unsupported method问题和解决方案
- bash 常用代码片段
- 基于BootStrap栅格栏系统完成网站底部版权信息区
- rest架构风格
- Linux下通过scsi-target-utils搭建多硬盘共享存储
- java获取当前tomcat进程(linux)
- Linux下通过iscsi搭建共享存储
- Linux 利用lsof命令恢复删除的文件
- VS2012下实现CMFCPropertyGridCtrl 内添加日期时间控件
- OpenCV 获取摄像头并显示摄像头视频
- 图像显示与加载——opencv(转)
- 童话---运维打油诗小节
- Centos7 安装dns服务named时,遇到的** server can't find xxx.com: NXDOMAIN问题
- Lodop、C-Lodop页面找不到报404错误解决
- vs2012+opencv,完成通用配置和测试离散傅里叶变换
- linux下.swp文件是什么?
- 找网站
- Tomcat的下载和配置
- 网站大全