21xrx.com
2025-03-27 07:27:55 Thursday
文章检索 我的文章 写文章
C++简单放大镜代码(3变333)
2023-07-12 19:23:19 深夜i     12     0
C++ 简单 放大镜 代码 变33

在数字图像处理中,放大镜是一种常见的工具,我们可以通过放大镜查看图片的细节。现在我们来学习如何使用C++编写一个简单的放大镜代码,把数字3放大为333。

首先,我们需要载入一个数字3的图片。你可以选择任意一张数字3的图片,这里我选择了这张:

![3.jpg](https://i.loli.net/2022/01/04/CFUIzqYxcp19QJN.jpg)

我们可以使用CImg库来载入图片,需要注意的是,在使用CImg库时,需要在程序中引用头文件:

#include "CImg.h"

载入图片的代码如下:

CImg<unsigned char> input("3.jpg");

接着,我们需要遍历每个像素,将数字3放大为333。我们可以使用for循环遍历像素,代码如下:

for (int y = 0; y < input.height(); y++) {
  for (int x = 0; x < input.width(); x++) {
    if (input(x, y, 0) == 0 && input(x, y, 1) == 0 && input(x, y, 2) == 255) {
      input(x, y, 0) = 0;
      input(x, y, 1) = 0;
      input(x, y, 2) = 255;
      if (x + 1 < input.width() && input(x + 1, y, 0) == 0 && input(x + 1, y, 1) == 0 && input(x + 1, y, 2) == 255) {
        input(x + 1, y, 0) = 0;
        input(x + 1, y, 1) = 0;
        input(x + 1, y, 2) = 255;
      }
      if (x - 1 >= 0 && input(x - 1, y, 0) == 0 && input(x - 1, y, 1) == 0 && input(x - 1, y, 2) == 255) {
        input(x - 1, y, 0) = 0;
        input(x - 1, y, 1) = 0;
        input(x - 1, y, 2) = 255;
      }
      if (y + 1 < input.height() && input(x, y + 1, 0) == 0 && input(x, y + 1, 1) == 0 && input(x, y + 1, 2) == 255) {
        input(x, y + 1, 0) = 0;
        input(x, y + 1, 1) = 0;
        input(x, y + 1, 2) = 255;
      }
      if (y - 1 >= 0 && input(x, y - 1, 0) == 0 && input(x, y - 1, 1) == 0 && input(x, y - 1, 2) == 255) {
        input(x, y - 1, 0) = 0;
        input(x, y - 1, 1) = 0;
        input(x, y - 1, 2) = 255;
      }
    }
  }
}

在遍历每个像素的过程中,我们首先判断该像素是否是数字3的蓝色部分,即R=0, G=0, B=255。如果是,我们将它变为红色,即R=255, G=0, B=0,并判定它的四个方向是否需要变色。

最后,我们将输出变色后的图片。输出图片的代码如下:

input.save("output.jpg");

现在,我们来看一下完整的代码:

#include "CImg.h"
using namespace cimg_library;
int main() {
  CImg<unsigned char> input("3.jpg");
  for (int y = 0; y < input.height(); y++) {
    for (int x = 0; x < input.width(); x++) {
      if (input(x, y, 0) == 0 && input(x, y, 1) == 0 && input(x, y, 2) == 255) {
        input(x, y, 0) = 0;
        input(x, y, 1) = 0;
        input(x, y, 2) = 255;
        if (x + 1 < input.width() && input(x + 1, y, 0) == 0 && input(x + 1, y, 1) == 0 && input(x + 1, y, 2) == 255) {
          input(x + 1, y, 0) = 0;
          input(x + 1, y, 1) = 0;
          input(x + 1, y, 2) = 255;
        }
        if (x - 1 >= 0 && input(x - 1, y, 0) == 0 && input(x - 1, y, 1) == 0 && input(x - 1, y, 2) == 255) {
          input(x - 1, y, 0) = 0;
          input(x - 1, y, 1) = 0;
          input(x - 1, y, 2) = 255;
        }
        if (y + 1 < input.height() && input(x, y + 1, 0) == 0 && input(x, y + 1, 1) == 0 && input(x, y + 1, 2) == 255) {
          input(x, y + 1, 0) = 0;
          input(x, y + 1, 1) = 0;
          input(x, y + 1, 2) = 255;
        }
        if (y - 1 >= 0 && input(x, y - 1, 0) == 0 && input(x, y - 1, 1) == 0 && input(x, y - 1, 2) == 255) {
          input(x, y - 1, 0) = 0;
          input(x, y - 1, 1) = 0;
          input(x, y - 1, 2) = 255;
        }
      }
    }
  }
  input.save("output.jpg");
  return 0;
}

最后,我们来看一下放大眼的效果,下面是放大镜前后的对比图:

放大前:

![3.jpg](https://i.loli.net/2022/01/04/CFUIzqYxcp19QJN.jpg)

放大后:

![output.jpg](https://i.loli.net/2022/01/04/pYEG5HIvk9D31yO.jpg)

从上图可以看出,我们已经成功将数字3放大为333,放大后的图片清晰度也有所提高,这对于数字图像处理来说是非常有意义的。

  
  

评论区

请求出错了