图像滤镜特效(反色、浮雕、雕刻、怀旧、冰冻、暗调)(一)

对图像进行滤镜(PS中的叫法)特效处理完全是导师的要求,现把工作整理出来(效果图见最后)。

一、反色特效

反色特效原理比较简单,就是分别把RGB通道的像素值取反即可。




下面是反色特效VC++程序:

<span style="font-size:14px;">/*************************************************************************
*
* 函数名称:
*   Negative(LPBYTE lpDIBBits, LPSTR lpDIB, LONG lWidth, LONG lHeight)
*
* 参数:
*   lpDIBBits            - 原始图像的像素指针
*   lWidth               - 原始图像的宽度
*   lHeight              - 原始图像的高度
*
*
* 说明:
*   实现图像的反色效果。
*
************************************************************************/
BOOL WINAPI Negative(LPBYTE lpDIBBits, LPSTR lpDIB, LONG lWidth, LONG lHeight)
{
	// 颜色表中的颜色数目
	DWORD wNumColors;//DWORD位32位无符号整型

	// 获取DIB中颜色表中的颜色数目  
	//DIBNumColors()该函数返回DIB中调色板的颜色的种数。对于单色位图,返回2,对于16色位图,返回16,
	// 对于256色位图,返回256;对于真彩色位图(24位),没有调色板,返回0。
	wNumColors = ::DIBNumColors(lpDIB);

	unsigned char *lpSrc;
	LONG i, j;
	int buf;
	if (wNumColors == 256)
	{
		LONG lLineBytes = WIDTHBYTES(lWidth * 8);

		for (i = lHeight; i >= 1; i--)
		{
			for (j = lWidth; j >= 0; j--)
			{
				buf = 255 - *((unsigned char*)lpDIBBits + lLineBytes*(lHeight - i) + j);
				lpSrc = (unsigned char*)lpDIBBits + lLineBytes*(lHeight - i) + j;
				*lpSrc = (unsigned char)buf;
			}
		}
	}
	else if (wNumColors == 0)
	{
		LONG lLineBytes = WIDTHBYTES(lWidth * 24);

		for (i = lHeight; i >= 1; i--)
		{
			for (j = lWidth * 3; j >= 0; j--)
			{
				buf = 255 - *((unsigned char*)lpDIBBits + lLineBytes*(lHeight - i) + j);
				lpSrc = (unsigned char*)lpDIBBits + lLineBytes*(lHeight - i) + j;
				*lpSrc = (unsigned char)buf;
			}
		}
	}
	else
	{
		MessageBox(NULL, TEXT("不支持此类型位图!"), TEXT("系统提示"), MB_ICONINFORMATION | MB_YESNO);
	}

	return TRUE;
}</span>

二、浮雕特效

浮雕图像效果是指图像的前景前向凸出背景。所谓的“浮雕”处理是指图像上的一个像素和它左上方的那个像素之间的差值的一种处理过程,为了使图像保持一定的亮度并呈现灰色,在处理过程中为这个差值加上一个数值为128的常量,需要注意的是,当设置一个像素值的时候,它和它的左上方的像素都要被用到,为了避免用到已经设置过的像素,应该从图像的右下方的像素开始处理,这样还会出现一个问题就是图像最左方和最上方的没有得到处理,这里我把它们的像素值设为128。


下面是浮雕特效VC++程序:


<span style="font-size:14px;">/*************************************************************************
*
* 函数名称:
*   Emboss(LPBYTE lpDIBBits, LPSTR lpDIB, LONG lWidth, LONG lHeight)
*
* 参数:
*   lpDIBBits            - 原始图像的像素指针
*   lWidth               - 原始图像的宽度
*   lHeight              - 原始图像的高度
*
*
* 说明:
*   实现图像的浮雕效果。
*
************************************************************************/
BOOL WINAPI Emboss(LPBYTE lpDIBBits, LPSTR lpDIB, LONG lWidth, LONG lHeight)
{
	// 颜色表中的颜色数目
	DWORD wNumColors;//DWORD位32位无符号整型

	// 获取DIB中颜色表中的颜色数目  
	//DIBNumColors()该函数返回DIB中调色板的颜色的种数。对于单色位图,返回2,对于16色位图,返回16,
	// 对于256色位图,返回256;对于真彩色位图(24位),没有调色板,返回0。
	wNumColors = ::DIBNumColors(lpDIB);

	unsigned char *lpSrc;
	LONG i, j;
	int buf;
	if (wNumColors == 256)
	
  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 我可以为你提供这段代码:from PIL import Imageimg = Image.open("图像的路径")inverted_image = ImageOps.invert(img)inverted_image.save("反色图像的路径") ### 回答2: 要使用Python来实现图像反色,可以使用PIL(Python Imaging Library)库来处理图像。首先,需要安装PIL库。 代码示例: ``` from PIL import Image # 打开图像文件 image = Image.open('image.jpg') # 获取图像的宽度和高度 width, height = image.size # 遍历每个像素点并计算反色 for x in range(width): for y in range(height): # 获取像素点的RGB值 r, g, b = image.getpixel((x, y)) # 计算反色RGB值 r = 255 - r g = 255 - g b = 255 - b # 设置像素点的RGB值 image.putpixel((x, y), (r, g, b)) #保存反色后的图像 image.save('inverted_image.jpg') ``` 上述代码首先打开了一张图像,然后获取了图像的宽度和高度。接下来,通过遍历每个像素点并计算反色的方式来实现图像反色。 最后,将反色后的图像保存到磁盘上。 使用这段代码,你可以将任何图像进行反色处理,生成一个反色版本的图像。将代码保存为.py文件并执行即可得到反色后的图像。需要注意的是,需事先安装PIL库才能运行该代码。 ### 回答3: 您可以使用PIL库来实现图像反色。以下是一段使用Python编写的代码示例: ```python from PIL import Image # 读取图像 image = Image.open("image.jpg") # 获取图片的宽度和高度 width, height = image.size # 遍历每个像素点 for x in range(width): for y in range(height): # 获取像素点的RGB值 r, g, b = image.getpixel((x, y)) # 计算反色值 r = 255 - r g = 255 - g b = 255 - b # 设置像素点的RGB值 image.putpixel((x, y), (r, g, b)) # 保存反色后的图像 image.save("inverted_image.jpg") ``` 在代码中,首先使用`Image.open()`方法打开图像文件,然后使用`image.size`获取图像的宽度和高度。接下来,使用嵌套的循环遍历图像中的每个像素点。使用`image.getpixel()`方法获取每个像素点的RGB值,并计算其反色值。最后,使用`image.putpixel()`方法设置像素点的反色RGB值。最后,使用`image.save()`方法保存反色后的图像。 注意,您需要将代码中的`"image.jpg"`替换为您自己的图像文件路径。生成的反色图像将保存为`"inverted_image.jpg"`。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值