OpenCV Mat 类型定义和赋值

本文详细介绍了在OpenCV中创建Mat对象的各种方法,包括一般定义方式、使用已有数组赋值、初始化为特定值矩阵等,并给出了具体的代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.一般的Mat定义方法:cv::Mat M(height,width,<Type>),例:

  cv::Mat M(480,640,CV_8UC3); 表示定义了一个480行640列的矩阵,矩阵的每个单元的由三个(C3:3 Channel)8位无符号整形(U Unsigned U8 8位)构成。

2.将已有数组赋给Mat矩阵的方法:

  cv::Mat M = cv::Mat(height,width,<Type>,data),例:

    float K[3][3] = {fc[0], 0, cc[0], 0, fc[1], cc[1], 0, 0, 1};    //摄像机内参数矩阵K
    cv::Mat mK = cv::Mat(3,3,CV_32FC1,K);    //内参数K Mat类型变量

3.类似matlab:zeros(),ones(),eyes()的初始化方法:

  cv::Mat M = cv::Mat::eye(height,width,<Type>)

  cv::Mat M = cv::Mat::ones(height,width,<Type>)

  cv::Mat M = cv::Mat::zeros(height,width,<Type>)

4.对于小矩阵给定数值的赋值方法:

  cv::Mat M = (cv::Mat_<Type>(height,width) << 0,-1,0,-1,5,-1,0,-1,0)

得到以下矩阵 M= 

        [0  -1  0

         -1  5  -1

         0  -1  0]

 

详细介绍请参考官网相关部分链接:http://docs.opencv.org/doc/tutorials/core/mat_the_basic_image_container/mat_the_basic_image_container.html

 

转载于:https://www.cnblogs.com/xzd1575/p/3959113.html

### OpenCVSharp 中 Mat 对象的赋值方法 在 OpenCVSharp 中,`Mat` 类提供了多种方式进行赋值操作。以下是几种常见的 `Mat` 赋值方式及其示例代码。 #### 1. 使用构造函数初始化 可以通过指定矩阵的大小初始值来创建一个新的 `Mat` 对象。 ```csharp using OpenCvSharp; class Program { static void Main() { // 创建一个 3x3 的单通道浮点型矩阵,并初始化为全零 Mat mat = new Mat(3, 3, MatType.CV_32FC1, Scalar.All(0)); } } ``` 这种方式适用于需要预先定义矩阵尺寸类型的场景[^1]。 #### 2. 使用枚举赋值 类似于 C++ 中的 `cv::Mat_<<type>>` 枚举语法,在 OpenCVSharp 中可以使用类似的结构化初始化器完成矩阵赋值。 ```csharp using OpenCvSharp; class Program { static void Main() { // 定义一个 2x2 浮点型矩阵并赋予具体数值 Mat mat = (new Mat<float>(2, 2) << 1f, 2f, 3f, 4f); Console.WriteLine(mat.Dump()); } } ``` 此方法适合于小型固定维度矩阵的快速初始化[^3]。 #### 3. 复制现有矩阵的内容 通过调用 `Clone()` 或者直接传递给另一个变量实现深拷贝或浅拷贝行为。 ```csharp using OpenCvSharp; class Program { static void Main() { Mat src = Cv2.ImRead("example.jpg"); Mat dst = src.Clone(); // 深拷贝 // 修改dst不会影响src dst.SetTo(new Scalar(0)); Console.WriteLine($"Source Matrix Empty? {src.Empty()}"); // false Console.WriteLine($"Destination Matrix Empty? {dst.Empty()}"); // true after setting to zero } } ``` #### 4. 利用算术运算符重载进行赋值 OpenCVSharp 支持对 `Mat` 进行加法、减法等基本运算的操作符重载功能,这也可以看作一种特殊的赋值形式。 ```csharp using OpenCvSharp; class Program { static void Main() { Mat img1 = Cv2.ImRead("image1.png", ImreadModes.GrayScale); Mat img2 = Cv2.ImRead("image2.png", ImreadModes.GrayScale); // 将img2中的每一个像素加上50再赋值回原位置 img2 += 50; // 计算两幅图之间的差异并将结果存储到diff中 Mat diff = img1 - img2; } } ``` 上述例子展示了如何利用简单的数学表达式改变或者生成新的图像数据[^2]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值