Mat对象操作

1 、Mat 介绍

Mat对象的图像数据结构、自动分配内存、不存在内存泄漏的问题,是面向对象的数据结构。分了两个部分,头部与数据部分

2 、Mat 常用的构造函数与方法

Mat B(A) 只复制头部
Mat F = A.clone(); 全部复制
Mat G; A.copyTo(G) 全部复制

#构造函数
Mat()
Mat(int rows,int cols,int type)
Mat(Size size, int type)
Mat(int rows, int cols, int type , cost Scalar &s)
Mat(Size size int type , cost Scalar &s)
Mat(int ndims, const int * sizes, int type)
Mat(int ndims, const int * sizes, int type,cost Scalar &s))
#方法
void copyTo(Mat mat)
void convertTo(Mat dst, int type)
Mat clone()
int channels()
int depth()
bool empty();
uchar* ptr(i=0)

3 、 创建数组M

    Mat M;
    M.create(4,3,CV_8UC2);
    M = Scalar(17,127);
    cout << "M = " << endl << " " << M << endl << endl;
image.png

4、 创建数组C

at C = (Mat_(3,3) << 0, -1, 0, -1, 5, -1, 0, -1, 0);
image.png

5、 整体代码

#include 
#include 
#include 

using namespace cv;
#include  
#include  
#include 
#include 

using namespace cv;
using namespace std;


int main(int argc, char** argv) {

    Mat src, dst;
    src = imread("D:\\imageTest.jpg");
    if (!src.data) {
        printf("could not load image...\n");
        return -1;
    }
    namedWindow("input image", CV_WINDOW_AUTOSIZE);
    imshow("input image", src);

    Mat M;
    M.create(4,3,CV_8UC2);
    M = Scalar(17,127);
    cout << "M = " << endl << " " << M << endl << endl;

    uchar* pp = M.ptr(0);
    printf("%d\n", *pp);

    Mat C = (Mat_(3,3) << 0, -1, 0, -1, 5, -1, 0, -1, 0);
    cout << "C = " << endl << " " << C << endl << endl;


    waitKey();
    return 0;
}

你可能感兴趣的:(Mat对象操作)