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

2019-05-25 09:33:59 浏览数 (1)

搭建环境

dev下搭建环境,详情见https://www.jianshu.com/p/d5e18b9b0333

输入图像:

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

代码语言:javascript复制
#include "CImg.h"

using namespace cimg_library;

int main() {
    CImg<unsigned char> img("1.bmp");
    
    img.display("Ex1");
    return 0;
}

运行结果

2. 把 1.bmp 文件的白色区域变成红色,黑色区域变成绿色

代码语言:javascript复制
#include "CImg.h" 
using namespace cimg_library; 
int main() 
{ 
    CImg<unsigned char> img("1.bmp"); 
    cimg_forXY(img, x, y) {
        if (img(x,y,0) < 100 && img(x,y,1) < 100 && img(x,y,2) < 100) {
            img(x,y,0) = 0;
            img(x,y,1) = 255;
            img(x,y,2) = 0;
        }
        else if (img(x,y,0) >= 250 && img(x,y,1) >= 250 && img(x,y,2) >= 250) {
            img(x,y,0) = 255;
            img(x,y,1) = 0;
            img(x,y,2) = 0;
        }
    }
    img.display("Ex1");
    return 0;
}

运行结果

3. 在图上绘制一个圆形区域,圆心坐标(50,50),半径为 30,填充颜色为蓝色。

代码语言:javascript复制
#include "CImg.h"


#include <cmath>    

using namespace cimg_library;

int main() {
    CImg<unsigned char> img(300, 300, 1, 3);
    
    img.fill(0);
    cimg_forXY(img, x, y) { // 遍历 
        
        //圆心为(50, 50)
        double dx_square = (x-50) * (x-50); // dx^2
        double dy_square = (y-50) * (y-50); // dy^2
        double distance = sqrt(dx_square   dy_square); // 与(50, 50)的距离 
        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;
}

运行结果

4. 在图上绘制一个圆形区域,圆心坐标(50,50),半径为 3,填充颜色为黄色。

代码语言:javascript复制
#include "CImg.h"


#include <cmath>    

using namespace cimg_library;

int main() {
    CImg<unsigned char> img(300, 300, 1, 3);
    
    img.fill(0);
    cimg_forXY(img, x, y) {
        
        //圆心为(50, 50)
        double dx_square = (x-50) * (x-50);
        double dy_square = (y-50) * (y-50);
        double distance = sqrt(dx_square   dy_square);
        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;
}

运行结果

思考:

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

因为像素点过少,当半径很小的时候,只能用有限的像素点来绘制一个圆,就会出现锯齿的现象

0 人点赞