OpenCV入门3:像素操作

在OpenCV中,图像的像素值是以一个多维数组的形式表示的。上一篇已经介绍了cv::Mat类。对于图像中的每一个像素,可以通过Mat对象中的at(i,j)函数(type可以是uchar、int等)获得Mat对象的像素值。

  • 访问像素值:
cv::Vec3b pixel = image.at(y, x); // 获取指定像素处的像素值
unsigned char r = pixel[2]; // 获取红色通道的像素值
  • 修改像素值:
image.at(y, x) = cv::Vec3b(255, 0, 0); // 设置指定像素处的像素值为蓝色

对于一幅图片,如果想要对其中的一些像素点进行计算,一般通过Mat矩阵的二维循环逐一改变像素值。例如: 

  Mat image = imread("test.jpg");
  int rows = image.rows;
  int cols = image.cols;
  for (int i = 0; i < rows; i++)
  {
      for (int j = 0; j < cols; j++)
      {
          Vec3b& color = image.at(i, j);
          color[0] = 255 - color[0]; // 修改 B 像素值
          color[1] = 255 - color[1]; // 修改 G 像素值
          color[2] = 255 - color[2]; // 修改 R 像素值
      }
  }
  imshow("image", image);
  waitKey();

这段代码演示了如何遍历图像的每个像素并反转BGR通道的值,然后显示处理后的图像。

上述代码中还用到了图像读取的函数imread()。这个函数是OpenCV中图像加载的方法。除此之外还有一些常用的图像操作的方法,举例如下:

  • 加载和保存图像:

cv::imread()函数可以读取多种图像格式的文件,例如JPEG、PNG等,cv::imwrite()函数可以将图像保存到磁盘上。例如:

  Mat image = imread("test.jpg");
  imwrite("output.jpg", image);
  • 图像的基本处理:

OpenCV中提供了一些基本的图像处理函数,例如resize()(调整图像大小)、reshape()(调整通道数)、copyTo()(复制图像)等。例如:

  Mat image = imread("test.jpg");
  Mat resizedImage;
  resize(image, resizedImage, Size(128, 128));
  imshow("image", resizedImage);
  waitKey();

这段代码演示了如何将图像缩小并显示缩小后的图像。

你可能感兴趣的:(opencv,计算机视觉)