没有合适的资源?快使用搜索试试~ 我知道了~
首页Java获取彩色图像中的主色彩的实例代码
Java获取彩色图像中的主色彩的实例代码

主要介绍了Java获取彩色图像中的主色彩的实例代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
资源详情
资源评论
资源推荐

Java获取彩色图像中的主色彩的实例代码获取彩色图像中的主色彩的实例代码
主要介绍了Java获取彩色图像中的主色彩的实例代码,小编觉得挺不错的,现在分享给大家,也给大家做个参
考。一起跟随小编过来看看吧
本文讲述了Java获取彩色图像中的主色彩的实例代码。分享给大家供大家参考,具体如下:
一:基本思路一:基本思路
对于一张RGB色彩空间的彩色图像,很多时间我们想通过程序获得该图像有几种主要的色彩,但是对一般图像来说,在色彩
交界处都是通过像素混合来实现自然过渡,所以直接扫描图像的像素值,得到的不同颜色值可能多达上百中,而实际上图像可
能只有3~4种的主要色彩,如何去掉那些混合颜色,准确提取出来这3~4中的主色彩,根据一般图像的特征,图像在不同色
彩的边界处混合不同的颜色值,此可以视为图像的边缘特性之一,因此可以根据简单的边缘梯度算法实现这些混合像素的提取
得到输出的像素值数组,然后扫描每个像素值,寻找指定半径参数R周围的像素,发现为零,而且距离中心像素最近的像素点
的值做为中心像素的像素值,扫描结束以后输出像素数组,然后对数组线性扫描,即可得到图片的主要色彩RGB值。
二:实现步骤二:实现步骤
1. 输入图像数组,对彩色图像灰度化;
2. 对灰度化以后的图像,计算图像梯度,这里使用sobol算子;
3. 对得到每一个非零像素点实现半径为R的范围内的扫描,找出与之最相近的为零的原像素值;
4. 对得到数组进行简单的扫描,得到主色彩。
其中参数R是要根据不同应用场景,找到最合适的值。理论上图像越大,R的取值也应该越大,否则算法会失准。
三:原图及运行效果三:原图及运行效果
原图原图
算法运行之后提取到四种主要色彩算法运行之后提取到四种主要色彩
四:算法实现源代码四:算法实现源代码
public static BufferedImage removeBlendPixels(BufferedImage image, int raidus) {
int width = image.getWidth();
int height = image.getHeight();
int[] pixels = new int[width * height];
getRGB(image, 0, 0, width, height, pixels);
// 创建处理结果
BufferedImage resultImg = createCompatibleDestImage(image, null);
setRGB(resultImg, 0, 0, width, height, pixels);
// 灰度化与梯度求取
byte[] grayData = getGrayData(pixels, width, height);
byte[] binaryData = getGrident(grayData, width, height);
int index = 0;
for (int row = 1; row < height - 1; row++) {
for (int col = 1; col < width - 1; col++) {
index = row * width + col;
int pixel = (binaryData[index] & 0xff);
if (pixel > 0) {













安全验证
文档复制为VIP权益,开通VIP直接复制

评论1