opecv imwrite 设置总线占用时间
时间: 2023-09-04 19:10:12 浏览: 46
在OpenCV中,使用imwrite函数可以将图像保存到磁盘上。在保存图像时,如果使用了PCIe设备,那么也会占用PCIe总线资源。为了避免过度占用PCIe总线资源,可以通过设置imwrite函数的超时时间来控制PCIe设备的访问时间。
在OpenCV中,可以使用cv::imwrite函数来保存图像。该函数的代码如下:
```c++
bool cv::imwrite(const std::string& filename, InputArray img, const std::vector<int>& params=std::vector<int>())
```
其中,第三个参数params是一个可选参数,可以用来设置保存图像的格式和压缩等参数。在params中,可以设置一个名为CV_IMWRITE_PNG_COMPRESSION的常量来指定PNG图像的压缩等级。例如,可以将该参数设置为9,表示使用最高压缩等级。该参数的值越高,图像保存的时间就越长,但是压缩率也越高。
除了设置压缩等级外,还可以通过设置超时时间来控制PCIe设备的访问时间。在OpenCV中,默认的超时时间是5秒钟,可以通过以下代码来设置超时时间:
```c++
cv::setNumThreads(0);
cv::setUseOptimized(false);
cv::setTickFrequency(1e6);
cv::Mat image = cv::imread("image.png");
cv::imwrite("output.png", image, {CV_IMWRITE_PNG_COMPRESSION, 9, CV_IMWRITE_PNG_STRATEGY, CV_IMWRITE_PNG_STRATEGY_HUFFMAN_ONLY, CV_IMWRITE_PNG_BILEVEL, 1, CV_IMWRITE_PNG_COMPRESSION_LEVEL, 9, CV_IMWRITE_PNG_STRATEGY_DEFAULT, CV_IMWRITE_PNG_STRATEGY_FILTERED});
cv::waitKey(0);
```
在上述代码中,使用了cv::setNumThreads、cv::setUseOptimized和cv::setTickFrequency函数来设置OpenCV的优化参数。然后,使用cv::imread函数来读取一个PNG格式的图像,然后使用cv::imwrite函数将该图像保存为output.png文件。同时,在cv::imwrite函数的第三个参数中,设置了CV_IMWRITE_PNG_COMPRESSION_LEVEL参数为9,表示使用最高压缩等级,以控制PCIe设备的访问时间。