C++ opencv 中video capture类中的set函数的用法和参量
时间: 2023-09-06 19:08:41 浏览: 73
在C++ OpenCV中,VideoCapture类是用于捕获视频的类。set函数是其中的一个函数,用于设置摄像头或视频流的属性。它的语法如下:
```cpp
bool VideoCapture::set(int propId, double value);
```
其中,参数`propId`是一个整数类型,用于指定要设置的属性,`value`是一个双精度浮点型,用于指定属性的值。常见的`propId`属性和其含义如下:
- `CV_CAP_PROP_FRAME_WIDTH`:帧的宽度
- `CV_CAP_PROP_FRAME_HEIGHT`:帧的高度
- `CV_CAP_PROP_FPS`:帧率
- `CV_CAP_PROP_BRIGHTNESS`:亮度
- `CV_CAP_PROP_CONTRAST`:对比度
- `CV_CAP_PROP_SATURATION`:饱和度
- `CV_CAP_PROP_HUE`:色调
- `CV_CAP_PROP_GAIN`:增益
- `CV_CAP_PROP_EXPOSURE`:曝光时间
例如,要设置摄像头的曝光时间为50毫秒,可以使用以下代码:
```cpp
VideoCapture cap(0); // 打开摄像头
cap.set(CV_CAP_PROP_EXPOSURE, 50);
```
需要注意的是,不是所有的属性都能被摄像头或视频流支持。如果设置失败,则此函数返回false。
相关问题
c++的opencv中videowriter函数
`VideoWriter` 是 OpenCV 中一个用于将视频帧写入视频文件的类。它可以通过指定输出文件名、帧率、视频编解码器等参数来创建一个 `VideoWriter` 对象,并通过调用 `write` 方法来将每一帧图像写入输出文件。
以下是一个使用 `VideoWriter` 的 C++ 代码示例:
```c++
#include <opencv2/opencv.hpp>
using namespace cv;
int main()
{
// 打开视频源
VideoCapture capture("input.mp4");
// 创建 VideoWriter 对象
VideoWriter writer("output.avi", VideoWriter::fourcc('M', 'J', 'P', 'G'), 30, Size(640, 480));
// 循环读取视频帧并写入输出文件
Mat frame;
while (capture.read(frame)) {
writer.write(frame);
}
// 释放资源
capture.release();
writer.release();
return 0;
}
```
在上面的代码中,`VideoWriter::fourcc('M', 'J', 'P', 'G')` 表示使用 MJPEG 编解码器,`30` 表示帧率为 30 帧/秒,`Size(640, 480)` 表示输出视频的分辨率为 640x480。你可以根据实际需要修改这些参数。
C++opencv中findContours函数用法
在C++的OpenCV中,findContours函数用于查找图像中的轮廓。其函数原型如下:
```cpp
void findContours(InputOutputArray image, OutputArrayOfArrays contours, OutputArray hierarchy, int mode, int method, Point offset = Point());
```
其中,
- InputOutputArray image:输入图像,必须为8位单通道二进制图像。
- OutputArrayOfArrays contours:输出轮廓,为一个向量类型,包含所有检测到的轮廓。
- OutputArray hierarchy:轮廓的层次结构,可不传入该参数。
- int mode:轮廓检索模式,可取值为RETR_EXTERNAL、RETR_LIST、RETR_CCOMP和RETR_TREE。
- int method:轮廓逼近方法,可取值为CHAIN_APPROX_NONE、CHAIN_APPROX_SIMPLE、CHAIN_APPROX_TC89_L1和CHAIN_APPROX_TC89_KCOS。
- Point offset:轮廓点的可选偏移量。
例如,下面的代码使用findContours函数查找图像中的轮廓并在图像中绘制出来:
```cpp
Mat image = imread("example.jpg", IMREAD_GRAYSCALE);
Mat binary;
threshold(image, binary, 100, 255, THRESH_BINARY);
vector<vector<Point>> contours;
vector<Vec4i> hierarchy;
findContours(binary, contours, hierarchy, RETR_TREE, CHAIN_APPROX_SIMPLE, Point());
Mat result = Mat::zeros(image.size(), CV_8UC3);
for (size_t i = 0; i < contours.size(); i++) {
drawContours(result, contours, i, Scalar(0, 0, 255), 2, 8, hierarchy);
}
imshow("result", result);
```
其中,先使用threshold函数将图像二值化,然后使用findContours函数查找轮廓,并使用drawContours函数将轮廓绘制在新的图像上,最后显示结果图像。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)