什么是图像滤镜?

图像滤镜是一种方法或过程,通过它可以修改图像的颜色、阴影、色调、饱和度、纹理和其他特征。滤镜用于根据商业、艺术或审美需要在视觉上修改图像。

如今,图像滤镜在社交媒体中非常普遍。Instagram 有各种各样的滤镜,Facebook 也是如此。Picsart 等编辑应用程序也提供了许多滤镜。滤镜可以为图像提供新的视觉效果并使其看起来不同。人们使用滤镜为他们的照片提供他们想要的效果。

这里OpenCV有什么用?

OpenCV 是一个免费使用的 Python 库,可用于计算机视觉任务。它具有许多功能和方法,可用于执行各种任务。我将应用一些图像转换方法来获取滤镜并创建所需的效果。

让我们继续进行所需的导入。

import cv2
import numpy as np
import scipy

我们将主要需要 NumPy 和 OpenCV,稍后将需要 SciPy。

现在让我们阅读图像文件。

这是我们将要使用的图像文件。

#Read the image
image = cv2.imread('shop.jpg')

现在,我们可以继续实现滤镜。

灰度滤镜

我们从实现最基本和最广泛使用的滤镜开始。

灰度滤镜用于为图像提供黑白效果。基本上去除了图像中的彩色成分。我们将使用 cv2.cvtColor()将图像转换为灰度。

#greyscale filter
def greyscale(img):greyscale = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)return greyscale

现在,将该函数应用于我们的图像。

#making the greyscale image
a1 = greyscale(image)

现在,我们将图像保存为文件。

filename = 'greyscale.jpg'
# Using cv2.imwrite() method
# Saving the image
cv2.imwrite(filename, a1)

输出:

因此,我们可以看到图像已成功转换为灰度。接下来,让我们尝试另一个。

亮度调节

通常,我们看到滤镜使图像更亮,而其他滤镜会降低亮度。这些是亮度调整滤镜的结果。为此,我们将使用 cv2.convertScaleAbs()。可以更改 Beta 值以获得适当的结果。

# brightness adjustment
def bright(img, beta_value ):img_bright = cv2.convertScaleAbs(img, beta=beta_value)return img_bright

函数已定义,现在 beta 值将给出适当的结果。正值表示图像较亮,负值表示图像较暗。

#making the  more bright image
#positive beta value
a2 = bright(image, 60)

现在,我们保存图像。

filename = 'more_bright.jpg'
# Using cv2.imwrite() method
# Saving the image
cv2.imwrite(filename, a2)

输出:

正如我们所看到的,图像现在更亮了。现在,让我们制作一个更暗的图像。

#making the  less bright image
#negative beta value
a3 = bright(image, -60)

使用负Beta 值。现在,让我们保存图像。

filename = 'less_bright.jpg'
# Using cv2.imwrite() method
# Saving the image
cv2.imwrite(filename, a3)

输出:

我们可以看到图像现在不那么亮了。

锐利效果

锐化效果也被大量使用。我们将使用OpenCV 中的 filter2D方法进行适当的编辑。

锐化效果的内核将是:[[-1, -1, -1], [-1, 9.5, -1], [-1, -1, -1]]

让我们继续编码:

#sharp effect
def sharpen(img):kernel = np.array([[-1, -1, -1], [-1, 9.5, -1], [-1, -1, -1]])img_sharpen = cv2.filter2D(img, -1, kernel)return img_sharpen

现在,让我们保存图像。

#making the sharp image
a4 = sharpen(image)
filename = 'sharpen.jpg'
# Using cv2.imwrite() method
# Saving the image
cv2.imwrite(filename, a4)

输出:

正如我们所看到的,图像现在更清晰了。

棕褐色滤镜

棕褐色是图像编辑中最常用的滤镜之一。棕褐色为照片增添了温暖的棕色效果。复古、平静和怀旧的效果被添加到图像中。

让我们在 Python 中实现。

为此,我们将使用 cv2.transform() 函数。继续代码。

#sepia effect
def sepia(img):img_sepia = np.array(img, dtype=np.float64) # converting to float to prevent lossimg_sepia = cv2.transform(img_sepia, np.matrix([[0.272, 0.534, 0.131],[0.349, 0.686, 0.168],[0.393, 0.769, 0.189]])) # multipying image with special sepia matriximg_sepia[np.where(img_sepia > 255)] = 255 # normalizing values greater than 255 to 255img_sepia = np.array(img_sepia, dtype=np.uint8)return img_sepia

让我们实现该功能并保存图像。

#making the sepia image
a5 = sepia(image)
filename = 'sepia.jpg'
# Using cv2.imwrite() method
# Saving the image
cv2.imwrite(filename, a5)

输出:

效果看起来很棒。滤镜实现完美。

铅笔素描效果:灰度

让我们实现一个灰度铅笔素描效果。事实上,它很容易实现,因为有一个内置函数来实现它。

#grey pencil sketch effect
def pencil_sketch_grey(img):#inbuilt function to create sketch effect in colour and greyscalesk_gray, sk_color = cv2.pencilSketch(img, sigma_s=60, sigma_r=0.07, shade_factor=0.1) return  sk_gray

现在,我们应用该函数并保存图像。

#making the grey pencil sketch
a6 = pencil_sketch_grey(image)
filename = 'pencil_grey.jpg'
# Using cv2.imwrite() method
# Saving the image
cv2.imwrite(filename, a6)

输出:

确实,图像看起来像一个粗略的铅笔素描。现在,是时候实现彩色版本了。

铅笔素描效果:彩色版本

现在,我们实现铅笔素描效果的彩色版本。

#colour pencil sketch effect
def pencil_sketch_col(img):#inbuilt function to create sketch effect in colour and greyscalesk_gray, sk_color = cv2.pencilSketch(img, sigma_s=60, sigma_r=0.07, shade_factor=0.1) return  sk_color

我们应用该函数并保存图像。

#making the colour pencil sketch
a7 = pencil_sketch_col(image)
filename = 'pencil_col.jpg'
# Using cv2.imwrite() method
# Saving the image
cv2.imwrite(filename, a7)

输出:

效果相当有趣,总体而言,实现了铅笔素描效果。

HDR效果:

HDR 效果被大量使用,因为它增加了图像的细节层次。我将使用 **cv2.detailEnhance()**来实现这一点。

#HDR effect
def HDR(img):hdr = cv2.detailEnhance(img, sigma_s=12, sigma_r=0.15)return  hdr

现在,我们应用该函数。

#making the hdr img
a8 = HDR(image)

现在,我们保存图像。

filename = 'HDR.jpg'
# Using cv2.imwrite() method
# Saving the image
cv2.imwrite(filename, a8)

输出:

反转滤镜

反转滤镜实际上很容易实现。每个人都曾在某些时候使用过这种滤镜,让他们的头发变白。

所有,我们要做的基本上就是反转像素值。这可以通过将像素值减去 255 来完成。在 Python 中,我们可以为此使用 cv2.bitwise_not()函数。

# invert filter
def invert(img):inv = cv2.bitwise_not(img)return inv

现在,让我们应用该功能并保存图像。

#making the invert img
a9 = invert(image)
filename = 'invert.jpg'
# Using cv2.imwrite() method
# Saving the image
cv2.imwrite(filename, a9)

输出:

好像是异世界的东西吧?好吧,反转滤镜确实很有趣。

现在我们将尝试夏季和冬季效果滤镜。

为此,我们需要一个查找表。但是从头开始创建查找表是一个很大的过程。我们可以使用 SciPy 函数来实现这一点。

#defining a function
from scipy.interpolate import UnivariateSpline
def LookupTable(x, y):spline = UnivariateSpline(x, y)return spline(range(256))

现在,函数已定义,让我们继续。

夏季效果滤镜

让我们实现一个夏季效果滤镜,它基本上增加了图像的温暖度。为了实现这一点,我们将增加红色通道中的值并减少蓝色通道中的值。

#summer effect
def Summer(img):increaseLookupTable = LookupTable([0, 64, 128, 256], [0, 80, 160, 256])decreaseLookupTable = LookupTable([0, 64, 128, 256], [0, 50, 100, 256])blue_channel, green_channel,red_channel  = cv2.split(img)red_channel = cv2.LUT(red_channel, increaseLookupTable).astype(np.uint8)blue_channel = cv2.LUT(blue_channel, decreaseLookupTable).astype(np.uint8)sum= cv2.merge((blue_channel, green_channel, red_channel ))return sum

现在,保存图像。

#making the summer img
a11 = Summer(image)
filename = 'Summer.jpg'
# Using cv2.imwrite() method
# Saving the image
cv2.imwrite(filename, a11)

输出:

实现了夏季效果滤镜。

现在,我们实现冬季效果滤镜。

冬季效果滤镜:

在冬季效果滤镜中,将进行相反的操作。图像的温暖度会降低。红色通道中的值将减少,蓝色通道中的值将增加。

#winter effect
def Winter(img):increaseLookupTable = LookupTable([0, 64, 128, 256], [0, 80, 160, 256])decreaseLookupTable = LookupTable([0, 64, 128, 256], [0, 50, 100, 256])blue_channel, green_channel,red_channel = cv2.split(img)red_channel = cv2.LUT(red_channel, decreaseLookupTable).astype(np.uint8)blue_channel = cv2.LUT(blue_channel, increaseLookupTable).astype(np.uint8)win= cv2.merge((blue_channel, green_channel, red_channel))return win

代码已实现。所以,现在我们保存图像。

#making the winter img
a10 = Winter(image)
filename = 'Winter.jpg'
# Using cv2.imwrite() method
# Saving the image
cv2.imwrite(filename, a10)

输出:

效果实现了。图像暖度降低并产生寒冷效果。

要检查代码和图像文件,请检查此链接: https://github.com/prateekmaj21/Image-Processing-Tasks

☆ END ☆

如果看到这里,说明你喜欢这篇文章,请转发、点赞。微信搜索「uncle_pn」,欢迎添加小编微信「 woshicver」,每日朋友圈更新一篇高质量博文。

扫描二维码添加小编↓

使用 Opencv 创建类似 Instagram 的滤镜!相关推荐

  1. ​使用 Opencv 创建类似 Instagram 的滤镜!

    什么是图像滤镜? 图像滤镜是一种方法或过程,通过它可以修改图像的颜色.阴影.色调.饱和度.纹理和其他特征.滤镜用于根据商业.艺术或审美需要在视觉上修改图像. 如今,图像滤镜在社交媒体中非常普遍.Ins ...

  2. instagram架构_如何创建像Instagram这样的照片共享应用程序:基本知识。

    instagram架构 by Dmytro Brovkin 由Dmytro Brovkin 如何创建像Instagram这样的照片共享应用程序:基本知识. (How to create a photo ...

  3. ndarray python 映射_191123 使用 Pybind11 和 OpenCV 创建 Python 库

    参观飞机工厂不能让你学得流体力学,也不能让你学会开飞机.然而如果你会开飞机又懂流体力学,参观飞机工厂可以带给你最大的乐趣和价值.-- 侯捷 献给 @AliceInt-ZLJ by Knight @20 ...

  4. Python+OpenCV创建级联文件(Windows7/10环境)

    目录 1.搭建环境 2.准备数据集 3.训练级联文件 之前使用Python+OpenCV实现交通路标识别,具体实现步骤及心得如下: OpenCV训练属于自己的xml文件,需以下几个步骤: 1.首先下载 ...

  5. 【Qt】在Qt中使用opencv,不要使用opencv创建窗口

    问题描述 在ubuntu14.04.5 Qt5.6中使用opencv创建窗口显示摄像头时,报错: (:1103): Gtk-WARNING **: gtk_disable_setlocale() mu ...

  6. OpenCV之highgui 模块. 高层GUI和媒体I/O: 为程序界面添加滑动条 OpenCV的视频输入和相似度测量 用OpenCV创建视频

    为程序界面添加滑动条 在以前的教程中 (例如 linear blending 和 brightness and contrast adjustments)你有可能注意到需要 input 一些数值到我们 ...

  7. OpenCV创建3D直方图

    OpenCV创建3D直方图 创建3D直方图 目标 代码 解释 结果 创建3D直方图 目标 在本教程中,您将学习如何 为可视窗口创建自己的回调键盘功能. 在可视窗口中显示3D直方图. 代码 #inclu ...

  8. OpenCV创建小部件Creating Widgets

    OpenCV创建小部件 创建小部件 目标 代码 解释 结果 创建小部件 目标 在本教程中,您将学习如何 使用WidgetAccessor和VTK创建自己的窗口小部件. 在可视化窗口中显示您的窗口小部件 ...

  9. OpenCV创建自己的corner检测器

    OpenCV创建自己的corner检测器 创建自己的corner检测器 目标 代码 结果 创建自己的corner检测器 目标 在本教程中,您将学习如何: 使用OpenCV函数cv :: cornerE ...

最新文章

  1. Oracle RAC禁用DRM
  2. comparator 字符串比较大小_Java中Comparable和Comparator实现对象比较
  3. 数据挖掘:Bloom filter
  4. zzuli OJ 1047: 对数表
  5. Eureka工作原理
  6. 计算机应用基础电子教案吉林,中等职业学校计算机应用基础课程改革初探.doc...
  7. 新加坡全面开放边境,畅游畅游《摘金奇缘》新加坡地标性景点
  8. 计算机网络实验四协议分析心得,计算机网络学习心得体会范文
  9. mysql通过正则表达式根据手机号判断运营商
  10. Photoshop设计精讲精练笔记
  11. IDEMIA携手Unisys为澳大利亚内政事务部提供生物识别服务
  12. jQuery框架介绍
  13. 亚马逊将推出VR购物应用,支持Vive Rift PSVR三大平台
  14. C语言线程lock与unlock,lock()和unlock()是怎么实现【面试题详解】
  15. 给手机安装NES模拟器,游戏无限玩
  16. 详细介绍HDFS的API实操与读写流程
  17. 服务器备案在什么位置,海外服务器怎么备案
  18. tl-微服务专题07-RibbonFeign介绍及使用详解
  19. ASF之SAR云计算(成果包括RTC GAMMA、InSAR GAMMA、autoRIFT)
  20. doccano数据标注平台使用

热门文章

  1. DVB数字电视常见信号指标解释
  2. 守护云数据安全,百度智能云喜提SOC安全认证!
  3. Scade——学习笔记(2)
  4. Scade——学习笔记(5)
  5. 马云:关注饭局没有意义
  6. 软件工程师如何转型人工智能?
  7. typora基础使用
  8. 低调的818一年半来常读的书
  9. Linux杂谈之nsswitch.conf配置文件
  10. UVa 10003Cutting Sticks