Ex1:图像读取和显示以及像素操作

Ex1:图像读取和显示以及像素操作


1079


输入图像

  1. 读取 1.bmp 文件,并用CImg.display()显示

    pic1
    代码如下:

    ```
    #include "CImg.h"
    using namespace cimg_library;
    
    int main() {
        //读取图片
        CImg<unsigned char> img("2.bmp");
        //显示图片
        img.display("Ex1");
        return 0;
    }
    ```
    
    1. 把1.bmp文件的白色区域变成红色,黑色区域变成绿色。
      pic2
      代码如下:

      
      #include "CImg.h"
      
      using namespace cimg_library;
      
      int main() {
          CImg<unsigned char> img("2.bmp");
          cimg_forXY(img, x, y) {
              if(img(x,y,0) < 200 && img(x,y,1) < 200 && img(x,y,2) < 200) {
                  img(x,y,0) = 0;
                  img(x,y,1) = 255;
                  img(x,y,2) = 0;
              }
              else if(img(x,y,0) >= 200 && img(x,y,1) >= 200 && img(x,y,2) >= 200) {
                  img(x,y,0) = 255;
                  img(x,y,1) = 0;
                  img(x,y,2) = 0;
              }
          }
          img.display("Ex1");
          return 0;
      }
    2. 在图上绘制一个圆形区域,圆心坐标(50,50),半径为30,填充颜色为蓝色。
      pic3
      代码如下:

      
      #include "CImg.h"
      
      
      #include <cmath>    
      
      using namespace cimg_library;
      
      int main() {
          CImg<unsigned char> img(200, 200, 1, 3);
          img.fill(0);
          cimg_forXY(img, x, y) {
              //圆心为(50, 50)
              double x2 = pow(x-50, 2);
              double y2 = pow(y-50, 2);
              double distance = sqrt(x2+y2);
              if(distance <= 30.0) { // 半径为30
                  img(x, y, 0) = 0;
                  img(x, y, 1) = 0;
                  img(x, y, 2) = 255;
              }
          }
          img.display("Ex1");
          return 0;
      }
    3. 在图上绘制一个圆形区域,圆心坐标(50,50),半径为3,填充颜色为黄色
      pic4
      代码如下:

      
      #include "CImg.h"
      
      
      #include <cmath>    
      
      using namespace cimg_library;
      
      int main() {
          CImg<unsigned char> img(200, 200, 1, 3);
          img.fill(0);
          cimg_forXY(img, x, y) {
              //圆心为(50, 50)
              double x2 = pow(x-50, 2);
              double y2 = pow(y-50, 2);
              double distance = sqrt(x2+y2);
              if(distance <= 3.0) { // 半径为3
                  img(x, y, 0) = 255;
                  img(x, y, 1) = 255;
                  img(x, y, 2) = 0;
              }
          }
          img.display("Ex1");
          return 0;
      }

思考

为什么第四步绘制的圆形区域形状效果不好?

答:因为用到的像素太少,分辨率不高,因此方块感明显,边缘锯齿明显,不圆润,不连续,因此形状不好,对比第三步的半径大小,因为第三步中半径大得多,因此圆形的外缘有更多的像素组成,看起来锯齿没那么明显,方块感也减少,因此方块越密集,给人的视觉效果就越平滑,越连续。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值