C++ OpenCV 图像读取、保存及处理:完整指南

本文将深入浅出地讲解C++和OpenCV库中图像读取、保存、显示、通道、像素值、尺寸、裁剪、缩放、转换和处理等关键知识点。

1. 图像数据类型

OpenCV 支持多种图像数据类型,包括灰度图像、彩色图像和深度图像等。

2. 图像读取

使用 OpenCV 的 imread 函数可以读取图像文件。常见的图像格式包括 BMP、JPEG、PNG 等。

#include <opencv2/opencv.hpp>

using namespace cv;

int main() {
  Mat image = imread('path/to/image.jpg');
  // 处理图像
  return 0;
}

3. 图像保存

使用 OpenCV 的 imwrite 函数可以将图像保存为指定格式的文件,常见的格式包括 BMP、JPEG、PNG 等。

#include <opencv2/opencv.hpp>

using namespace cv;

int main() {
  Mat image = imread('path/to/image.jpg');
  // 处理图像
  imwrite('path/to/save.png', image);
  return 0;
}

4. 图像显示

使用 OpenCV 的 imshow 函数可以将图像显示在窗口中。需要注意的是,需要先创建一个窗口并指定窗口名称。

#include <opencv2/opencv.hpp>

using namespace cv;

int main() {
  Mat image = imread('path/to/image.jpg');
  namedWindow('Image Window', WINDOW_AUTOSIZE);
  imshow('Image Window', image);
  waitKey(0);
  return 0;
}

5. 图像通道

彩色图像包含多个通道,每个通道表示不同的颜色信息。常见的有 RGB、HSV、YCrCb 等。

6. 像素值

图像的像素值表示图像中每个像素的亮度或颜色信息。可以通过 Mat 对象的 at 方法获取或修改像素值。

#include <opencv2/opencv.hpp>

using namespace cv;

int main() {
  Mat image = imread('path/to/image.jpg');
  // 获取像素值
  int pixelValue = image.at<uchar>(row, col);
  // 修改像素值
  image.at<uchar>(row, col) = newValue;
  return 0;
}

7. 图像尺寸

图像的尺寸表示图像的宽度和高度。可以通过 Mat 对象的 colsrows 属性获取。

#include <opencv2/opencv.hpp>

using namespace cv;

int main() {
  Mat image = imread('path/to/image.jpg');
  int width = image.cols;
  int height = image.rows;
  return 0;
}

8. 图像裁剪

使用 Mat 对象的 ROI 方法可以对图像进行裁剪操作,可以指定裁剪的区域和大小。

#include <opencv2/opencv.hpp>

using namespace cv;

int main() {
  Mat image = imread('path/to/image.jpg');
  Rect roi(x, y, width, height);
  Mat croppedImage = image(roi);
  return 0;
}

9. 图像缩放

使用 OpenCV 的 resize 函数可以对图像进行缩放操作,可以指定缩放后的大小和插值方法。

#include <opencv2/opencv.hpp>

using namespace cv;

int main() {
  Mat image = imread('path/to/image.jpg');
  resize(image, resizedImage, Size(newWidth, newHeight), 0, 0, INTER_LINEAR);
  return 0;
}

10. 图像转换

使用 OpenCV 的 cvtColor 函数可以对图像进行颜色空间转换,可以将彩色图像转换为灰度图像或者其他颜色空间。

#include <opencv2/opencv.hpp>

using namespace cv;

int main() {
  Mat image = imread('path/to/image.jpg');
  cvtColor(image, grayImage, COLOR_BGR2GRAY);
  return 0;
}

11. 图像处理

OpenCV 提供了丰富的图像处理函数,包括滤波、形态学操作、边缘检测、特征提取等。可以使用这些函数对图像进行处理和分析。

更多学习资源:

  • OpenCV 官方文档:https://docs.opencv.org/4.x/index.html
  • OpenCV 中文教程:https://www.cnblogs.com/Imageshop/category/792490.html

希望本文能够帮助您更好地理解 C++ 和 OpenCV 图像处理的基本知识。如果您有任何疑问,欢迎在评论区留言。

C++ OpenCV 图像读取、保存及处理:完整指南

原文地址: https://www.cveoy.top/t/topic/j7ix 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录