首页 > 学院 > 开发设计 > 正文

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

2019-11-06 09:00:33
字体:
来源:转载
供稿:网友

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


1079


输入图像

读取 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.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;}

在图上绘制一个圆形区域,圆心坐标(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) { // 半径为3 img(x, y, 0) = 255; img(x, y, 1) = 255; img(x, y, 2) = 0; } } img.display("Ex1"); return 0;}

在图上绘制一个圆形区域,圆心坐标(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;}

思考

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

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


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表