21xrx.com
2024-12-22 20:22:43 Sunday
登录
文章检索 我的文章 写文章
C++ Opencv 图片读取方法
2023-07-13 04:22:53 深夜i     --     --
C++ Opencv 图片读取 方法 编程

C++ Opencv 图片读取方法

Opencv 是一个非常流行的计算机视觉库,它提供了丰富的图像处理函数和工具。在使用 Opencv 进行图像处理时,我们经常需要读取图像文件进行处理。下面介绍 C++ Opencv 的图片读取方法。

首先,需要包含头文件 #include

1. 读取本地图片文件

读取本地图片文件非常简单,我们只需要使用 Opencv 的 imread 函数即可。函数原型如下:

cv::Mat cv::imread(const String& filename, int flags=IMREAD_COLOR)

其中 filename 表示文件路径,flags 表示图片读取标记,常用的有:

- IMREAD_COLOR:读取彩色图像,默认标记,也可写成 1。

- IMREAD_GRAYSCALE:读取灰度图像,标记为 0。

- IMREAD_UNCHANGED:读取原图像,包括 alpha 通道,标记为 -1。

示例代码:

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

2. 读取网络图片

如果需要读取网络图片,则需要先下载图片并保存在本地,然后再使用 imread 函数读取。下面是一个使用 cURL 库下载网络图片的示例代码:

#include

size_t write_data(void* ptr, size_t size, size_t nmemb, void* data)

{

  size_t rsize = size * nmemb;

  FILE* fp = (FILE*)data;

  fwrite(ptr, size, nmemb, fp);

  return rsize;

}

bool download_image(const std::string& url, const std::string& filename)

{

  CURL* curl = curl_easy_init();

  if (curl)

  {

    FILE* fp = fopen(filename.c_str(), "wb");

    if (fp)

    {

      curl_easy_setopt(curl, CURLOPT_URL, url.c_str());

      curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_data);

      curl_easy_setopt(curl, CURLOPT_WRITEDATA, fp);

      CURLcode res = curl_easy_perform(curl);

      fclose(fp);

      if (res == CURLE_OK)

        return true;

    }

    curl_easy_cleanup(curl);

  }

  return false;

}

int main()

{

  std::string url = "https://test.com/test.jpg";

  std::string filename = "test.jpg";

  if (download_image(url, filename))

  {

    cv::Mat image = cv::imread(filename, cv::IMREAD_COLOR);

    // do something with image

  }

  return 0;

}

可以看到,代码先使用 cURL 下载网络图片,再使用 imread 函数读取本地图片文件。这里的关键是使用 CURLOPT_WRITEFUNCTION 指定写入文件的回调函数 write_data,并使用 CURLOPT_WRITEDATA 传递文件指针 fp。

C++ Opencv 图片读取方法非常简单,需要注意的是图片路径和标记的正确使用。在实际应用中,还需要根据实际情况选择本地或网络图片的读取方法。

  
  

评论区

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