21xrx.com
2024-12-23 01:28:57 Monday
登录
文章检索 我的文章 写文章
C++读取和显示图片
2023-06-26 17:29:33 深夜i     --     --
C++ 读取 显示 图片

在计算机视觉和图像处理领域,图像读取和显示是非常重要的操作。C++是一种广泛使用的编程语言,可以通过C++编程语言来实现读取和显示图像。本文将介绍如何使用C++读取和显示图像。

1. 加载图像

使用C++读取图像,需要使用OpenCV库或其他图像加载库。通过打开图像文件并使用相应的库函数对其进行解码,可以将图像数据读入内存。以下是一个示例代码,它使用OpenCV库加载一幅图像:


#include <opencv2/opencv.hpp>

using namespace cv;

int main(int argc, char** argv)

{

  Mat img = imread("lena.jpg", IMREAD_COLOR);

  if (img.empty())

  

    std::cout << "Could not read the image file." << std::endl;

    return -1;

  

  namedWindow("Image");

  imshow("Image", img);

  waitKey(0);

  return 0;

}

在上面的代码中,Mat img定义为图像的矩阵。imread函数用于读取指定路径下的图像文件,并将其存储到img矩阵中。如果无法读取图像,则会输出错误信息。namedWindow函数用于创建一个显示图像的窗口,并为其命名。imshow函数用于在创建的窗口中显示图像数据,waitKey函数用于等待用户键入任何键盘按键。

2. 修改图像

通过C++修改图像,需要使用OpenCV或其他图像处理库。可以使用函数对图像进行各种操作,如调整亮度、对比度、伽马校正等。以下是一个示例代码,它使用OpenCV库调整图像的对比度:


#include <opencv2/opencv.hpp>

using namespace cv;

int main(int argc, char** argv)

{

  Mat img = imread("lena.jpg", IMREAD_COLOR);

  if (img.empty())

  

    std::cout << "Could not read the image file." << std::endl;

    return -1;

  

  namedWindow("Image");

  imshow("Image", img);

  float alpha = 1.0; // Contrast (1.0 - 3.0)

  int beta = 30; // Brightness (0-100)

  Mat new_img = Mat::zeros(img.size(), img.type());

  for (int y = 0; y < img.rows; y++)

  {

    for (int x = 0; x < img.cols; x++)

    {

      for (int c = 0; c < img.channels(); c++)

      {

        new_img.at<Vec3b>(y, x)[c] = saturate_cast<uchar>(alpha * img.at<Vec3b>(y, x)[c] + beta);

      }

    }

  }

  namedWindow("New Image");

  imshow("New Image", new_img);

  waitKey(0);

  return 0;

}

在上面的代码中,alpha和beta分别表示对比度和亮度的值。new_img矩阵被初始化为具有与原始图像大小和类型相同的零值矩阵。在循环中,对每个像素按指定对比度和亮度进行计算,并将新像素值赋值给new_img矩阵。最后使用namedWindow和imshow函数显示修改后的图像。

3. 保存图像

通过C++保存图像,需要使用OpenCV或其他图像处理库。可以使用函数将矩阵中的图像数据保存到磁盘上的图像文件中。以下是一个示例代码,它使用OpenCV库将修改后的图像保存到新文件中:


#include <opencv2/opencv.hpp>

using namespace cv;

int main(int argc, char** argv)

{

  Mat img = imread("lena.jpg", IMREAD_COLOR);

  if (img.empty())

  

    std::cout << "Could not read the image file." << std::endl;

    return -1;

  

  namedWindow("Original Image");

  imshow("Original Image", img);

  float alpha = 1.0; // Contrast (1.0 - 3.0)

  int beta = 30; // Brightness (0-100)

  Mat new_img = Mat::zeros(img.size(), img.type());

  for (int y = 0; y < img.rows; y++)

  {

    for (int x = 0; x < img.cols; x++)

    {

      for (int c = 0; c < img.channels(); c++)

      {

        new_img.at<Vec3b>(y, x)[c] = saturate_cast<uchar>(alpha * img.at<Vec3b>(y, x)[c] + beta);

      }

    }

  }

  namedWindow("New Image");

  imshow("New Image", new_img);

  imwrite("lena_new.jpg", new_img);

  waitKey(0);

  return 0;

}

在上面的代码中,imwrite函数用于将new_img矩阵中的数据保存到lena_new.jpg文件中。

总结:

本文介绍了如何使用C++读取和显示图像,以及如何对图像进行修改和保存。C++中使用图像加载库和图像处理库,可以实现各种图像处理和计算机视觉应用。

  
  

评论区

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