Opencv3 C++ VS2017 学习笔记 02 Mat对象

  • 学习笔记00和01的问题:
    • 出现两个交互窗口,一个灰色,一个是结果,如下图
    • 解决:打开项目-属性-链接器-输入-附加依赖项,将配置opencv时添加的依赖项删除一个即可
    • dst.size是错误的, size不是对象dst的属性,而是一个方法函数, dst.size(),同理dst.type();
  • Mat
    • Mat对象分两个部分:头部+数据部分
  • Mat对象的使用(程序也有一些,此处不再列举)
    • Mat构造函数
      • Mat dst(2,2 CV_8UC3, Scalar(0,0,255));
        • Scalar括号内的是2*2矩阵中每个元素的值,显然这里4个元素都是一样的,即(0,0,255)
      • Mat dst(行,列, CV_8UC3,具体像素值);
        • CV_8UC3
          • 8:每个通道的一个像素占8位
          • U:无符号
          • C:char类型
          • 3:3个通道,决定了Scalar()的参数数量
    • Mat复制问题
      • 部分复制:只复制Mat的头和指针部分,不复制数据部分
        • Mat A = imread(B);
        • Mat C(D);
      • 完全复制
        • Mat F = A.clone();   F依然随A改变
        • Mat G;  A.copyTo(G);  AG互不干涉
    • 定义小数组filter
      • Mat filter = (Mat_<double>(3,3)<<0,-1,0,-1,5,-1,0,-1,0);
        • double就是矩阵元素类型
      • 得到前天学的kernel矩阵
    • 另一种创建矩阵的用法
      • Mat m=Mat::zeros(src.size(), src.type());
        • 全0矩阵,大小类型和src一样
      • Mat m = Mat::zeros(2,2, CV_8UC1);
        • 全0矩阵, 2*2的,CV_8UC1同上所述
/***Mat对象的基本使用方法***/
int main(int argc, char ** argv)
{
    Mat src;
    src = imread("地址");
    if(!src.data)
    {
        cout<<"no data"<<endl;
        return -1;
    }
    namedWindow("src_imgae", WINDOW_AUTOSIZE);
    imshow("src_image", src);
    
    Mat dst;                                //创建一个Mat对象
    dst = Mat(src.size(), src.type());       //初始化一个Mat对象,和src的大小类型都一样
    dst = Scalar(123,12,132);             //赋值, Scalar标量,括号就是RGB的值
    namedWindow("dst_image", WINDOW_AUTOSIZE);
    imshow("dst_image", dst);
    
    Mat dst_clone =src.clone();            //克隆图像会随着源图像改变而改变

    Mat dst_copy;                //复制的图像不会因为源图像的变化而变化
    src.copyTo(dst_copy);
    
    Mat dst_cvt;
    cvtColor(src, dst_cvt, RGB2GRAY);        //改变颜色空间
    cout<<"src' channels: "<<endl;
    cout<<"dst_cvt's channels: "<<endl;
    const uchar* dst_cvt_firstRow = dst_cvt.ptr<uchar>(0);
    cout<<"dst_cvt's firstRow: "<<*dst_cvt_firstRow<<endl;

    int cols = dst.cols;      //宽度
    int rows = dst.rows;       //高度
    
    Mat dst_mat(2,2,CV_8UC3,Scalar(12,122,1));    

    waitKey(0);
    return 0; 

}

猜你喜欢

转载自blog.csdn.net/Mrsherlock_/article/details/104486339
今日推荐