学习笔记——基于opencv的图像处理

2022.5.23

一、基本的图像容器矩阵类Mat

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

int main()
{
    Mat A,C;//建立头文件
    A=imread("C://Users//asus//Pictures//Saved Pictures//timg.jpg");//imread()函数读取图像,并为矩阵A分配内存,括号内是读取图片路径及名称
    Mat B(A);//拷贝构造函数argv[1],CV_LOAD_IMAGE_COLOR
    C=A;
    imshow("C",C);//输出图像
    Mat D(A,Rect(100,100,200,200));//选择矩形,访问A中感兴趣的底层数据,其中(100,100)表起始点,(200,200)表终止点
    imshow("D",D);
    Mat E=A(Range::all(),Range(50,150));//,选择x轴上位置,访问A中感兴趣的部分,50为X轴上的起点,150为x轴上的终点
    imshow("E",E);
//以上为拷贝对象头文件
    Mat F=A.clone();
    Mat G;
    A.copyTo(G);
    imshow("F",F);
    imshow("G",G);
//以上为完全拷贝,拷贝底层数据,此时对F、G进行修改,不会影响原始数据
    waitKey(0);
    return 0;
}

1、对于以上所示对象,所有对象最后都指向同一个单独的数据矩阵(访问共有的底层数据),其中任意一个修改,都会影响别的对象

2、可以创建特殊的头文件,只访问底层数据中感兴趣的部分

3、用于输出图像内存分配的opencv是自动的,在此学习中不用考虑内存管理

4、分配操作符和拷贝构造符仅仅只是拷贝头文件

5、clone.()、copy.()函数可拷贝图像底层数据,修改后,不会影响其它对象

2022.5.25

简单Mat矩阵的构建

    Mat M(2,3,CV_8UC3,Scalar(120,80,100,50));//二维多通道图像CV_8UC3(CV_[每个基元分量的比特数8][有符号S或无符号U](前为类型前缀)[C通道][通道数3]),Scalar(蓝,绿,红,透明度)
    imshow("M",M);//输出图像矩阵色彩和三基色形式
    cout<<"M="<(4,4)<<1,1,2,2,
           3,3,4,4,
           5,5,6,6,
           7,7,8,8);//初始化
    I.create(4,4,CV_8UC(4));
    cout<<"I ="<

1、构建矩阵可以有Mat()构造器、Create()我没搞明白它的意思、对小矩阵直接逗号分隔初始化、对已有的矩阵创造新的头文件并clone()或copyTo、随机函数填充矩阵。(除了create()构造器,还有用数组对Mat()初始化以及为已存的lpllmage(opencv2.4.9之前)指针创建一个头文件还完全不能理解)

2、Matlab初始化函数:zeros()全0,ones()全1,eyes()对角矩阵

2022.5.27

Mat类成员变量

    Mat I=(Mat_(4,4)<<1,1,2,2,
           3,3,4,4,
           5,5,6,6,
           7,7,8,8);
//Mat类成员rows()、cols()、row()、col()
    cout<<"I ="<

(其中 m = M.dims,即 M的维度)         在此处要重新回顾一下指针,不熟

    int i=1,j=1;
    uchar *pa=I.data+I.step[0]*i+I.step[1]*j;
    float *pDij= (float*)pa;//注意此处的data返回的数据类型,是uchar型,所以指针pa也需要是uchar*型在cout时,要转换成float*型指针,然后再访问该处地址的数据值。
    cout<

2022.5.31

矩阵初始化

    Mat J(3,5,CV_32FC1,1);//J为3*5的矩阵,float型的单通道,把每个点都初始化为1
    Mat K(3,5,CV_32FC1,Scalar(1));//Scalar初始化
    //cout<

矩阵初始化除了以上,还有clone、copyto等方法;

diag(int d)d=0主对角线,d=1是比主对角线低的对角线....

Mat::setTo(Scalar &s)以s初始化矩阵

Mat::push_back(Mat)在原来的Mat上在加几行

Mat::pop_back(size_t nelems=1)移除最下边几行(但是这几种都没试过)

你可能感兴趣的:(opencv,学习,图像处理)