在此之前,我们已经实现项目的第一步,就是读取视频文件,获取每一帧对应的图片。本小节要做的就是对这些原图片进行处理。因为我们绘画水平有限,我们希望在原图片的轮廓上进行绘画。但是原图片的颜色不太好,我们希望能够把背景变成白色,小人变成黑色。这样小人的轮廓就很清晰。(当然如果忽略本次操作,直接在原图上进行绘画,也是可以的。)
加芊芊老师vx领取最新资料哦
一、进制首先我们要普及一下进制的数据。因为Java程序操作的颜色,往往是10进制的数值。但实际在表示颜色时候,一般会使用16进制的颜色值,或者rgb颜色值来表示。
进制关系
开发中可能会使用到进制
十进制(Decimal)
二进制(Binary)
八进制(Octal,简写OCT)
十六进制(Hexadecimal,简写HEX)
二、颜色
颜色的表示:红色,绿色,蓝色。
1、RGB(r,g,b)
0-255
rgb(0,0,0)黑色 rgb(255,255,255)白色 rgb(255,0,0)红色 rgb(0,255,0)绿色 rgb(0,0,255)蓝色
2、16进制颜色值
红,绿,蓝 #FF0000,红色 #00FF00,绿色 #0000FF,蓝色 #000000,黑色 #ffffff,白色
3、单词
red,红色 green,绿色 blue,蓝色 white,白色 black,黑色 pink,粉色
关于颜色有很多网站可以查看,比如:https://www.sioe.cn/yingyong/yanse-rgb-16/
以下截图展示部分颜色值:
三、代码实现
在上次课创建的项目里,新建一个java文件,命名为:D2_ChangeBack.java
示例代码:
package demo;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
public class D2_ChangeBack {
public static void main(String[] args) {
//1.要处理的图片的目录路径
String dirPath = "C:\Ruby\萨日朗\视频帧";
//2.处理后的图片,要存储的目录
String changePath = "C:\Ruby\萨日朗\换色\";
File dir = new File(dirPath);
//3.获取图片目录下所有的图片文件
File[] files = dir.listFiles();
System.out.println(files.length);
//4.遍历这个文件数组,操作每一张图片
for(int x = 0;x > 16;// 红色
rgb[1] = (color & 0xff00) >> 8;// 绿色
rgb[2] = (color & 0xff);// 蓝
//9.判断颜色值,进行换色:白色,黑色
if(rgb[0] < 140 && rgb[1] < 130 && rgb[2]<120){
image.setRGB(i, j, 0x000000);//黑色
}else{
image.setRGB(i, j, 0xffffff);//白色
}
}
}
//10.将换色后的图片数据,保存到目标文件夹里
File newFile = new File(changePath+files[x].getName());
System.out.println(newFile.getAbsolutePath());
try {
ImageIO.write(image, "jpg", newFile);
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
因为上课需要和学生的操作系统,所以我在自己的mac电脑上安装了windows虚拟机。只有一个C盘。
在本地硬盘上:创建目录结构:C:Ruby萨日朗换色。将程序执行后,该目录下有以下文件:
文末福利
大家可以加老师vx领取最新资料哦
别忘了扫码领资料哦,获取【Java高清路线图】和【全套学习视频和配套资料】



