opencv size函数用法
时间: 2024-11-28 08:02:44 浏览: 24
OpenCV中的`size()`函数主要用于获取图像、视频帧或其他矩阵的数据尺寸信息。它通常用于`cv::Mat`对象上,该对象代表了OpenCV中的二维数组。这个函数不需要传入参数,其返回值是一个`Size`结构体,包含了宽度(width)和高度(height)两个元素。
以下是基本的用法:
```cpp
cv::Mat img = cv::imread("image.jpg"); // 读取图像
cv::Size imageSize = img.size(); // 获取图像大小
int width = imageSize.width; // 图像宽度
int height = imageSize.height; // 图像高度
cout << "Image Size: " << width << "x" << height << endl;
```
如果需要对视频流进行操作,也可以遍历每一帧并获取其大小:
```cpp
for (auto &frame : videoCapture) {
cv::Size frameSize = frame.size();
// 处理每一帧...
}
```
相关问题
opencv adaptiveThreshold函数
adaptiveThreshold函数是OpenCV中用于自适应阈值化的函数。它根据图像的局部区域来确定阈值,因此可以针对不同区域进行不同的二值化处理。
函数原型为:
```C++
void adaptiveThreshold(InputArray src, OutputArray dst, double maxValue, int adaptiveMethod, int thresholdType, int blockSize, double C);
```
参数说明:
- src:输入图像,必须为单通道灰度图像。
- dst:输出图像,二值化后的结果。
- maxValue:最大值,当adaptiveMethod为THRESH_BINARY或THRESH_BINARY_INV时有效。
- adaptiveMethod:自适应阈值化方法,有两种可选:
- ADAPTIVE_THRESH_MEAN_C:使用相邻区域的平均值作为阈值。
- ADAPTIVE_THRESH_GAUSSIAN_C:使用相邻区域的加权平均值作为阈值,权值为高斯窗口的权值。
- thresholdType:阈值类型,有两种可选:
- THRESH_BINARY:将大于阈值的像素设为最大值,小于等于阈值的像素设为0。
- THRESH_BINARY_INV:将小于阈值的像素设为最大值,大于等于阈值的像素设为0。
- blockSize:邻域大小,必须是奇数。
- C:从平均值或加权平均值中减去的常数,通常为正数。
示例代码:
```C++
Mat src = imread("lena.jpg", IMREAD_GRAYSCALE);
Mat dst;
adaptiveThreshold(src, dst, 255, ADAPTIVE_THRESH_MEAN_C, THRESH_BINARY, 11, 4);
imshow("src", src);
imshow("dst", dst);
waitKey();
```
其中,使用LENA图像进行二值化处理。adaptiveMethod为ADAPTIVE_THRESH_MEAN_C,thresholdType为THRESH_BINARY,blockSize为11,C为4。运行结果如下图所示:
![adaptiveThreshold](https://img-blog.csdnimg.cn/20210708094719687.png)
opencv remap函数
OpenCV中的remap函数可以实现图像的重映射操作。它可以用于实现各种图像处理操作,例如图像缩放、旋转、镜像等。具体来说,remap函数可以将输入图像中的每个像素映射到输出图像中的新位置。
remap函数的原型如下:
```c++
void cv::remap(InputArray src, OutputArray dst, InputArray map1, InputArray map2, int interpolation, int borderMode, const Scalar& borderValue)
```
参数说明:
- src:输入图像。
- dst:输出图像。
- map1:第一个映射矩阵,可以是浮点型的二维数组或者单通道的浮点型图像。
- map2:第二个映射矩阵,可以是浮点型的二维数组或者单通道的浮点型图像。
- interpolation:插值方法,可以取以下值之一:INTER_NEAREST、INTER_LINEAR、INTER_CUBIC、INTER_AREA、INTER_LANCZOS4。
- borderMode:边界模式,可以取以下值之一:BORDER_CONSTANT、BORDER_REPLICATE、BORDER_REFLECT、BORDER_WRAP、BORDER_REFLECT_101。
- borderValue:边界值,当borderMode为BORDER_CONSTANT时,用于填充边界的像素值。
具体来说,remap函数将输入图像中的每个像素(x,y)通过map1(x,y)和map2(x,y)映射到输出图像中的位置(x',y'),然后使用指定的插值方法计算输出图像中位置(x',y')处的像素值。如果映射矩阵的尺寸与输入图像的尺寸不匹配,则只处理匹配部分。
下面是一个简单的例子,演示如何使用remap函数实现图像的水平镜像:
```c++
cv::Mat input_image = cv::imread("input_image.jpg");
cv::Mat map_x(input_image.size(), CV_32FC1);
cv::Mat map_y(input_image.size(), CV_32FC1);
for (int i = 0; i < input_image.rows; i++) {
for (int j = 0; j < input_image.cols; j++) {
map_x.at<float>(i, j) = input_image.cols - j - 1;
map_y.at<float>(i, j) = i;
}
}
cv::Mat output_image;
cv::remap(input_image, output_image, map_x, map_y, cv::INTER_LINEAR);
cv::imshow("Input Image", input_image);
cv::imshow("Output Image", output_image);
cv::waitKey(0);
```
上述代码中,我们首先创建两个映射矩阵map_x和map_y,用于实现水平镜像。然后,我们将输入图像和映射矩阵作为参数调用remap函数,得到输出图像output_image。最后,我们使用imshow函数显示输入图像和输出图像。
阅读全文