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)灰度图像(1维的)
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; 拷贝mat的数据区到frame中,在拷贝数据前会有一步:frame.create(this->size , this->type)
Mat frame = mat.clone(); //frame = mat 完全拷贝,把mat中的所有信息拷贝到frame中
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);
1)
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格式
