搭建环境
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. 为什么第四步绘制的圆形区域形状效果不好。
因为像素点过少,当半径很小的时候,只能用有限的像素点来绘制一个圆,就会出现锯齿的现象