opencv mat构造函数有几种
时间: 2023-11-07 10:37:05 浏览: 83
在OpenCV中,Mat是一个非常常用的类,用于表示图像和矩阵。它有多种构造函数,包括:
1. Mat(); //默认构造函数,创建一个空的Mat对象
2. Mat(int rows, int cols, int type); //创建指定大小和类型的Mat对象
3. Mat(Size size, int type); //创建指定大小和类型的Mat对象
4. Mat(int rows, int cols, int type, const Scalar& s); //创建指定大小、类型和初始值的Mat对象
5. Mat(Size size, int type, const Scalar& s); //创建指定大小、类型和初始值的Mat对象
6. Mat(const Mat& m); //拷贝构造函数,创建一个与给定Mat对象相同的新对象
7. Mat(int ndims, const int* sizes, int type); //创建n维矩阵对象
8. Mat(int ndims, const int* sizes, int type, const Scalar& s); //创建n维矩阵对象并初始化为指定值
其中,type参数指定了Mat对象的数据类型,Scalar是OpenCV中用于表示颜色、灰度等标量值的类。Size是OpenCV中用于表示二维尺寸的类。ndims和sizes参数用于创建n维矩阵对象。
相关问题
opencv中mat函数的使用方法
在OpenCV中,Mat是一个重要的数据类型,它是用来存储图像的。Mat可以看作是一个多维数组,它包含了图像的像素数据以及图像的元数据(如图像的大小,通道数,数据类型等)。
Mat的常用构造函数有以下几种:
1. Mat(): 创建一个空的Mat对象。
2. Mat(int rows, int cols, int type): 创建一个指定大小和类型的Mat对象。
3. Mat(Size size, int type): 创建一个指定大小和类型的Mat对象。
4. Mat(int rows, int cols, int type, Scalar s): 创建一个指定大小和类型,并用指定颜色初始化的Mat对象。
5. Mat(Size size, int type, Scalar s): 创建一个指定大小和类型,并用指定颜色初始化的Mat对象。
6. Mat(const Mat& m): 创建一个与给定Mat对象大小和类型相同的Mat对象,并复制给定对象的数据。
Mat的一些常用方法:
1. Mat::at(): 用于访问Mat对象中的像素值。
2. Mat::clone(): 创建一个与原Mat对象大小和类型相同的新对象,并将原对象数据复制到新对象中。
3. Mat::convertTo(): 将Mat对象中的像素值转换成指定的数据类型。
4. Mat::copyTo(): 复制一个Mat对象到另一个Mat对象中。
5. Mat::reshape(): 改变Mat对象的大小和通道数。
6. Mat::rows(): 返回Mat对象的行数。
7. Mat::cols(): 返回Mat对象的列数。
8. Mat::size(): 返回Mat对象的大小。
9. Mat::type(): 返回Mat对象的数据类型。
以下是一个简单的Mat的例子:
```
#include <opencv2/opencv.hpp>
using namespace cv;
int main()
{
Mat image = imread("lena.jpg", IMREAD_COLOR);
if (image.empty())
{
return -1;
}
Mat gray_image;
cvtColor(image, gray_image, COLOR_BGR2GRAY);
imshow("原图", image);
imshow("灰度图", gray_image);
waitKey();
return 0;
}
```
这段代码读取了一张彩色图像,将其转换为灰度图像,并显示在窗口中。
opencv初始化mat
### 如何在 OpenCV 中初始化 Mat 对象
#### C++ 初始化 `cv::Mat` 对象的方法
在 C++ 中,可以使用多种方式创建并初始化 `cv::Mat` 类型的对象:
1. **默认构造函数**
创建一个未定义大小和类型的矩阵。
```cpp
cv::Mat mat;
```
2. **指定尺寸和类型**
可以为新分配的内存设置初始值为零、特定数值或随机数。
```cpp
// 定义一个 3 行 4 列 的单通道浮点型 (CV_32F) 零矩阵
cv::Mat zeros = cv::Mat(3, 4, CV_32FC1, cv::Scalar(0));
// 定义一个 5x5 单通道字节型 (CV_8U),所有元素都设为 255 的矩阵
cv::Mat whiteImage = cv::Mat(5, 5, CV_8UC1, cv::Scalar(255));
// 使用 Scalar 来填充多维数组
cv::Mat multiChannel = cv::Mat(cv::Size(cols, rows), CV_8UC3, cv::Scalar(0, 255, 0)); // 绿色背景图
```
3. **从现有数据初始化**
如果已经有了图像文件或其他形式的数据源,则可以直接加载这些资源作为新的 `cv::Mat` 实例的内容[^3]。
```cpp
// 加载图片到 Mat 对象中
cv::Mat image = cv::imread("path/to/image.jpg");
```
#### Python 初始化 `numpy.ndarray`(即 `cv2.Mat`)
对于 Python 用户来说,由于 OpenCV-Python 库依赖 NumPy 数组来表示图像,所以实际上是在操作 `numpy.ndarray` 而不是严格意义上的 `cv::Mat`。不过二者之间存在紧密联系,并且 API 设计尽可能保持一致以便于跨平台移植代码[^2]。
以下是几种常见的初始化方法:
1. **创建空白画布**
```python
import numpy as np
# 黑底白线绘图板
blank_canvas = np.zeros((height, width, channels), dtype=np.uint8)
# 白纸黑墨水效果
paper_with_black_ink = 255 * np.ones((height, width, channels), dtype=np.uint8)
```
2. **读取外部媒体文件**
```python
import cv2
img = cv2.imread('example.png')
gray_img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # 将彩色图像转灰度图
```
这两种语言环境下都可以方便快捷地完成对图像容器的基础构建工作,具体选择取决于项目需求和个人偏好。
阅读全文
相关推荐

















