21xrx.com
2024-11-05 17:18:15 Tuesday
登录
文章检索 我的文章 写文章
C++简单放大镜代码(3变333)
2023-07-12 19:23:19 深夜i     --     --
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,放大后的图片清晰度也有所提高,这对于数字图像处理来说是非常有意义的。

  
  

评论区

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