21xrx.com
2024-09-19 09:40:06 Thursday
登录
文章检索 我的文章 写文章
OpenCV C++ 图片读取与释放
2023-06-28 22:31:08 深夜i     --     --
OpenCV C++ 图片读取 释放

OpenCV 是一个经典的计算机视觉库,可以用于开发图像和视频处理应用程序。其中,图片读取与释放是 OpenCV 中的基本操作,本文将使用 C++ 语言介绍 OpenCV 图片读取与释放的相关知识。

一、图片读取

在 OpenCV 中,图片读取的函数为 cv::imread,其原型如下:

Mat imread(const string& filename, int flags = IMREAD_COLOR);

其中,filename 表示待读取的文件名,flags 表示读取图片的选项。常用的选项有:

- IMREAD_UNCHANGED:读取原图。

- IMREAD_GRAYSCALE:读取灰度图。

- IMREAD_COLOR:读取彩色图,默认选项。

- IMREAD_ANYDEPTH:读取任意位深度的图像。

- IMREAD_ANYCOLOR:读取任意的彩色图像。

- IMREAD_LOAD_GDAL:通过 GDAL 库来读取图片。

读取图片返回的是一个 Mat 类型的矩阵对象,其中保存了读取出的像素值。

二、图片释放

在 OpenCV 中,释放图片占用的内存空间也是非常重要的。图片释放的函数为 cv::imwrite,其原型如下:

void cv::imwrite(const String& filename, InputArray img, const std::vector & params = std::vector ());

其中,filename 表示待写入的文件名,img 表示要写入的图像,params 表示写入图片的选项。常用的选项有:

- CV_IMWRITE_JPEG_QUALITY:JPEG 压缩质量,默认为 95。

- CV_IMWRITE_PNG_COMPRESSION:PNG 压缩级别,默认为 3。

- CV_IMWRITE_PXM_BINARY:PXM 文件是否为二进制格式,默认为 1。

在释放图片时,需要使用 cv::imwrite 函数将图片写入到一个临时文件中,然后再使用 cv::imread 函数从该文件中读取数据,并在读取完成后删除临时文件,释放占用的内存空间。

三、实例演示

以下是使用 OpenCV C++ 进行图片读取和释放的一个简单示例:


#include <opencv2/highgui/highgui.hpp>

#include <iostream>

using namespace cv;

using namespace std;

int main() {

  Mat image;

  image = imread("test.jpg", IMREAD_COLOR);

  if (image.empty())

    cout << "无法读取图片文件!" << endl;

    return -1;

  

  namedWindow("图片窗口", WINDOW_NORMAL);

  imshow("图片窗口", image);

  waitKey(0);

  destroyWindow("图片窗口");

  imwrite("temp.jpg", image);

  cout << "释放图片空间!" << endl;

  image = imread("temp.jpg", IMREAD_COLOR);

  namedWindow("图片窗口2", WINDOW_NORMAL);

  imshow("图片窗口2", image);

  waitKey(0);

  destroyWindow("图片窗口2");

  remove("temp.jpg");

  cout << "删除临时文件!" << endl;

  return 0;

}

在该示例中,我们首先使用 cv::imread 函数读取了一个名为 "test.jpg" 的图片,并将其显示在一个名为 "图片窗口" 的窗口中。然后,我们将图片写入到一个名为 "temp.jpg" 的临时文件中,并使用 cv::imread 函数从该临时文件中读取数据,以释放占用的内存空间。最后,我们删除了该临时文件。

通过该示例,我们可以清晰地了解 OpenCV C++ 中图片读取和释放的基本操作,并可以将其应用到我们的实际开发中。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复