`

Java SWT Image 图像 —— 反色、拉伸、透明叠加

 
阅读更多

图像反色

对于彩色图像的 R、G、B 各彩色分量取反的技术就是图像的反色处理,这在处理二值化图像的连通区域选取的时候非常重要。如物体连通域用黑色表示,而二值化后的物体连通域图像可那是白色的,而背景是黑色的,这时应手动选取图像的反色处理或有程序根据背景和物体连通域两种颜色的数量所占比例而自动选择是否选择选取图像的反色处理,其算法很简单,假设源图像一像素的红,绿,蓝分量为 (R,G,B),则目标图像该像素的红绿蓝分量应变为 (255 - R,255 - G, 255 - B)。

	private static ImageData reverseImage(ImageData srcData)
	{
		int bytesPerPixel = srcData.bytesPerLine / srcData.width;
		int destBytesPerLine = srcData.width * bytesPerPixel;
		byte[] newData = srcData.data;

		for (int i = 0; i < newData.length; i ++)
			newData[i] = (byte) (255 - newData[i]);
		ImageData newImageData = new ImageData(srcData.width, srcData.height, 
				srcData.depth, srcData.palette, destBytesPerLine, newData);
		newImageData.transparentPixel = srcData.transparentPixel;

		return newImageData;
	}

 

 

图像拉伸

图像的缩小/放大一般分为按比例缩小和不按比例缩小两种。图像的缩小操作中,是在现有的信息里如何挑选所需要的有用信息。图像的放大操作中,则需对尺寸放大后所多出来的空格填入适当的值,这是信息的估计问题,所以较图像的缩小要难一些,而且图像大比例放大时经常会出现马赛克效应。庆幸的是,SWT 工具箱对图像的拉伸进行了封装,开发者只需要调用方法 ImageData.scaledTo(int width, int height) 来获得一个拉伸后的 ImageData。

Image newImage = new Image(null, imageData[0].scaledTo(imageData[0].width / 2,
                          imageData[0].height / 2));

 

 

图像透明叠加

透明叠加方式是图象处理中常用的一种处理方式,在这种处理方式中,一幅图片叠加到另一幅图片上,但是这幅图象不是完全将原来的图象覆盖,而是能够部分的透过叠加的图象显示出来,透明的程度由透明度参数指定(假定为 a,其值在 0 与 1 之间,数值越小表明被叠加的图片越透明),其原理是目标图片的 R、G、B 以及 alpha 分别为待叠加图片 1 的 R、G、B 以及 alpha 分量乘以透明度参数 a 加上待叠加图片 2 的 R、G、B 以及 alpha 分量乘以 1-a 的值。我们可以使用图片的透明叠加作出水印的效果。

	private static ImageData watermark(ImageData srcData1, ImageData srcData2, double alpha) {
		if(srcData1.width != srcData2.width || srcData1.height != 
			srcData2.height || rcData1.bytesPerLine != srcData2.bytesPerLine)
			//未考虑不同大小图片的叠加
			return null;
		int bytesPerPixe = srcData1.bytesPerLine / srcData1.width;
		int destBytesPerLine = srcData1.width * bytesPerPixe;
		byte[] newData = new byte[srcData1.data.length];

		ImageData newImageData = new ImageData(srcData1.width, srcData1.height, srcData1.depth,
				srcData1.palette, destBytesPerLine, newData);
		for (int srcY = 0; srcY < srcData1.height; srcY++) {
			for (int srcX = 0; srcX < srcData1.bytesPerLine; srcX++) {
				int idx = srcY * srcData1.bytesPerLine + srcX;
				newImageData.data[idx] = (byte)(alpha * srcData1.data[idx]  + 
						(1- alpha) * srcData2.data[idx]);
			}
		}
		return newImageData;
	}

 


需要说明的是,以上所列举的清单中大部分都没有对透明度数据进行处理,读者如对带有透明度数据图片进行处理的时候,可自行添加相关代码,其处理过程跟对 ImageData 数据处理过程类似。

分享到:
评论

相关推荐

    QT+opencv图像点运算,包括图像反色,灰度拉伸,灰度均衡

    在本文中,我们将深入探讨如何使用QT和OpenCV库进行图像点运算,特别是关于图像反色、灰度拉伸和灰度均衡的概念和技术。QT是一个跨平台的应用程序开发框架,而OpenCV则是一个强大的计算机视觉库,两者结合可以提供...

    数字图像处理 反色

    在数字图像处理领域,"反色"是一种常见的操作,它涉及到像素值的转换,使得原始图像中的亮区域变成暗区域,而暗区域则变为亮区域。这种操作在图像的对比度增强、视觉效果改变或者某些特定分析应用中非常有用。在本...

    图像处理 反色 C/C++语言实现

    在图像处理领域,"反色"操作是一种常见的图像变换技术,它将图像中的每个像素的颜色反转,形成与原图颜色相反的效果。这种操作在很多场景下都有应用,比如图像调试、对比分析或者艺术效果的创造。本文将深入探讨如何...

    数字图像处理—图像反色

    在数字图像处理领域,"图像反色"是一个常见的操作,它涉及到颜色空间转换和像素值的翻转。图像反色,也称为图像反转或颜色倒置,是一种将图像中的颜色映射到其互补色的过程。这个过程对于图像分析、艺术创作以及某些...

    数字图像处理图像的反色代码

    在计算机视觉和图像处理领域,数字图像的反色是一种常见的操作,它将图像中的颜色反转,使得黑色变白色,白色变黑色,同时其他颜色也相应地进行翻转。这种操作通常用于对比度增强或者视觉效果的改变。在这个场景中,...

    JAVA 图片反色处理,放大或缩小

    在JAVA编程语言中,处理图像是一项常见的任务,包括图片的反色处理、放大和缩小等操作。这些功能在各种应用场景中都有所应用,比如图像编辑软件、网站开发、数据分析等。下面将详细介绍如何使用JAVA实现这些功能。 ...

    实现测试图像的反色变换

    在图像处理领域,"反色"是一种常见的操作,它能够将图像的颜色模式反转,从而得到与原图颜色相反的效果。这种技术广泛应用于图像分析、视觉艺术以及软件开发中。本项目是在VC6.0集成开发环境中实现的一个图像反色...

    Bmp图像反色处理

    "Bmp图像反色处理"是指对BMP图像中的像素颜色进行反转,形成与原图色彩相反的效果。256位的Bmp图像指的是每个像素有256种可能的颜色,这通常对应于8位深度的彩色图像,因为2^8=256。这种图像的每个像素由8个二进制位...

    MFC图像处理 反色和红色

    在图像处理中,反色也被称为取反或者二值反转,它是一种基本的图像处理操作。通常,图像的颜色由红、绿、蓝(RGB)三原色组成,每种颜色的值范围通常是0到255。反色操作就是将每个像素的颜色值取反,即255减去当前值...

    图像的反色

    在图像处理领域,"反色"是一个常见的操作,它涉及到颜色模式、像素值以及色彩空间的概念。反色,也称为取反或颜色反转,是一种将图像中的颜色转换为其补色的过程。这种操作广泛应用于图像编辑软件,如Photoshop、...

    图像反色处理的源代码资源

    在图像处理领域,"反色"(Invert Colors)是一种常见的操作,用于将图像中的颜色反转,形成一种对比强烈的视觉效果。反色处理通常应用于艺术创作、数据分析、辅助视觉障碍者理解和显示图像等方面。本资源提供了图像...

    vpm642图像反色

    在图像处理领域,"图像反色"是一种常见的操作,它涉及到像素值的反转,使得原本颜色较深的区域变浅,而原本颜色较浅的区域变深。在本实验"vpm 642 图像处理实验"中,我们将深入探讨这一概念及其实施方法。 图像反色...

    图像反色源代码

    图像反色的概念不仅局限于VC++,在其他编程语言如Python的PIL库、Java的AWT/Swing、JavaScript的Canvas API等都有相应的实现。同时,反色操作也可以与其他图像处理技术结合,如滤镜、边缘检测等,广泛应用于图像...

    C#图像处理_反色方式显示图像

    反色,也称为色彩反转或负片效果,是一种将图像颜色转换为其补色的操作,通常用于增强图像的对比度或创建独特的视觉效果。 首先,我们要了解.NET Framework提供的System.Drawing命名空间,它包含了处理图像所需的类...

    Vc++图像反色处理

    在计算机视觉和图像处理领域,反色处理是一种常见的图像操作,它通过反转图像中的像素颜色来达到特定的效果。在VC++环境下,我们可以利用MFC(Microsoft Foundation Classes)库或者直接操作位图数据来实现这一功能...

    点运算 图像反色 线性变换 阈值变换 窗口变换 灰度拉伸 灰度均衡.rar

    本项目提供了VS2017编译环境下的代码,能够直接运行并展示图像处理的几个关键操作:图像反色、线性变换、阈值变换、窗口变换、灰度拉伸和灰度均衡。 1. **图像反色**:图像反色是将图像中的每个像素的灰度值取其...

    数字图像实验之 反色和二值化

    总结来说,"数字图像实验之 反色和二值化"是一个涉及图像处理基础操作的学习实践,通过VC++6.0编程实现,可以帮助我们理解如何用代码控制和改变图像的视觉效果,以及如何利用这些技术简化图像以进行后续分析。...

    java 视频反色效果

    在Java编程语言中,实现视频反色效果是一项挑战性的任务,涉及到图像处理和色彩理论的知识。反色,也称为负片效果,是将图像或视频中的颜色反转的过程,通常通过取颜色的补色来实现。在本文中,我们将深入探讨如何在...

    opencv图像元素遍历反色

    基于Visual Studio的Opencv利用三种方法进行整个图像所有元素反色。

Global site tag (gtag.js) - Google Analytics