Mat类

数据类型定义

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
CV_位数(S|U|F)C通道数量
位数:
    8 , 16, 32 ,64  单通道颜色取值范围是0-255,所以通常是8

S|U|F:
    S--代表---signed int---有符号整形
    U--代表--unsigned int--无符号整形
    F--代表--float---------单精度浮点型

C通道数量:
    通道数量 = 1:灰度图片,单通道图像
    通道数量 = 3:灰度图片,单通道图像
    通道数量 = 4:带Alph通道的RGB图像,png图片是这种

示例代码

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#include <iostream>
#include <opencv2/opencv.hpp>

using namespace std;
using namespace cv;

int main(){

    Mat img = imread("../assets/lena.jpg",IMREAD_COLOR);
    cout<<"read img success!";
    imshow("img",img);

    // 获取图片的大小
    Size imgSize = img.size();
    cout<<"img size:"<<imgSize;
    // 获取图片的通道数量
    int channels = img.channels();
    // 获取数据类型
    cout<<"channels:"<<channels<<"type:"<<img.type()<<endl;


    // 创建一个图片对象
    Mat dst(400,600,CV_8UC3);
    // 在图片中间增加一根红色的线
    for(int i=0;i<600;i++){
        dst.at<Vec3b>(200,i) = Vec3b(0,0,255);
    }

    namedWindow("dst",WINDOW_NORMAL);
    imshow("dst",dst);

    waitKey(0);
    destroyAllWindows();
    return 0;
}

图像剪切

示例代码

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <iostream>
#include <opencv2/opencv.hpp>

using namespace std;
using namespace cv;

int main(){
    Mat img = imread("../assets/itheima.jpg",IMREAD_COLOR);

    // 定义要截取的矩形框
    Rect rect(100,50,200,200);

    // 这样即可完成截取
    Mat roi = img(rect);

    imshow("src",img);
    imshow("roi",roi);


    waitKey(0);
    destroyAllWindows();
    return 0;
}