iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >OpenCV-Python如何实现怀旧滤镜与连环画滤镜
  • 227
分享到

OpenCV-Python如何实现怀旧滤镜与连环画滤镜

2023-06-15 10:06:23 227人浏览 薄情痞子

Python 官方文档:入门教程 => 点击学习

摘要

这篇文章给大家分享的是有关OpenCV-python如何实现怀旧滤镜与连环画滤镜的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。怀旧滤镜实现原理不管是荣耀华为手机还是其他的手机,我们都可以找到相机中的怀旧效果,这是

这篇文章给大家分享的是有关OpenCV-python如何实现怀旧滤镜与连环画滤镜的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。

怀旧滤镜实现原理

不管是荣耀华为手机还是其他的手机,我们都可以找到相机中的怀旧效果,这是手机中常用的一种滤镜效果。

怀旧风格的设计主要是在图像的颜色空间进行处理。以BGR为例,对B、G、R这3个通道的颜色数值进行处理,让图像有一种泛黄的怀旧效果。设计的转换公式如下:

B=0.272r+0.534g+0.131*b

G=0.349r+0.686g+0.168*b

R=0.393r+0.769g+0.189*b

计算公式中的小写的bgr是原图像的RGB通道的颜色,结果BGR是怀旧变换后的值。需要注意的是,颜色值的范围在[0,255],需要在程序中约束一下。

实现怀旧滤镜

既然我们已经了解了其实现的原理公式。下面我们直接上代码实现该功能,具体代码如下所示:

def cowboy_effect(img):    new_img = img.copy()    h, w, n = img.shape    for i in range(w):        for j in range(h):            b = img[j, i, 0]            g = img[j, i, 1]            r = img[j, i, 2]            B = int(0.272 * r + 0.534 * g + 0.131 * b)            G = int(0.349 * r + 0.686 * g + 0.168 * b)            R = int(0.393 * r + 0.769 * g + 0.189 * b)            new_img[j, i, 0] = max(0, min(B, 255))            new_img[j, i, 1] = max(0, min(G, 255))            new_img[j, i, 2] = max(0, min(R, 255))    return new_imgif __name__ == "__main__":    img = cv2.imread("48.jpg")    cv2.imshow("0", img)    cv2.imshow("1", cowboy_effect(img))    cv2.waiTKEy()    cv2.destroyAllwindows()

运行之后,效果如下:

OpenCV-Python如何实现怀旧滤镜与连环画滤镜

连环画滤镜原理

从怀旧滤镜就可以看出来,其实相机的各种滤镜效果就是对RGB的颜色通道进行计算处理。既然怀旧滤镜有公式,那么肯定的连环画滤镜也有公式。它的具体公式如下:

R = |g – b + g + r| * r / 256

G = |b – g + b + r| * r / 256

B = |b – g + b + r| * g / 256

实现连环画滤镜

有了公式,下面直接套用公式即可。具体代码如下所示:

# 连环画滤镜def comics_effect(img):    new_img = img.copy()    h, w, n = img.shape    for i in range(w):        for j in range(h):            b = img[j, i, 0]            g = img[j, i, 1]            r = img[j, i, 2]            R = int(int(abs(g - b + g + r)) * r / 256)            G = int(int(abs(b - g + b + r)) * r / 256)            B = int(int(abs(b - g + b + r)) * g / 256)            new_img[j, i, 0] = R            new_img[j, i, 1] = G            new_img[j, i, 2] = B    return new_imgif __name__ == "__main__":    img = cv2.imread("48.jpg")    cv2.imshow("0", img)    cv2.imshow("1", comics_effect(img))    cv2.waitKey()    cv2.destroyAllWindows()

运行之后,效果如下:

OpenCV-Python如何实现怀旧滤镜与连环画滤镜

综上所述,基本上所有的基础滤镜都是通过对RGB通道的颜色值进行公式计算得到的。当然,要是数学很好,又对算法情有独钟的读者,可以自己自研滤镜算法丰富滤镜的效果。

熔铸算法

r = r*128/(g+b +1);
g = g*128/(r+b +1);
b = b*128/(g+r +1);

冰冻算法

r = (r-g-b)*3/2;
g = (g-r-b)*3/2;
b = (b-g-r)*3/2;

#include <math.h>#include <opencv/cv.h>#include <opencv/highgui.h>#define MAXSIZE (32768)using namespace cv;using namespace std; void casting(const Mat& src){ Mat img; src.copyTo(img); int width=src.cols; int heigh=src.rows; Mat dst(img.size(),CV_8UC3); for (int y=0;y<heigh;y++) {  uchar* imgP=img.ptr<uchar>(y);  uchar* dstP=dst.ptr<uchar>(y);  for (int x=0;x<width;x++)  {   float b0=imgP[3*x];   float g0=imgP[3*x+1];   float r0=imgP[3*x+2];    float b = b0*255/(g0+r0+1);   float g = g0*255/(b0+r0+1);   float r = r0*255/(g0+b0+1);    r = (r>255 ? 255 : (r<0? 0 : r));   g = (g>255 ? 255 : (g<0? 0 : g));   b = (b>255 ? 255 : (b<0? 0 : b));    dstP[3*x] = (uchar)b;   dstP[3*x+1] = (uchar)g;   dstP[3*x+2] = (uchar)r;  } } imshow("熔铸",dst); imwrite("D:/img/熔铸.jpg",dst); } void freezing(const Mat& src){ Mat img; src.copyTo(img); int width=src.cols; int heigh=src.rows; Mat dst(img.size(),CV_8UC3); for (int y=0;y<heigh;y++) {  uchar* imgP=img.ptr<uchar>(y);  uchar* dstP=dst.ptr<uchar>(y);  for (int x=0;x<width;x++)  {   float b0=imgP[3*x];   float g0=imgP[3*x+1];   float r0=imgP[3*x+2];    float b = (b0-g0-r0)*3/2;   float g = (g0-b0-r0)*3/2;   float r = (r0-g0-b0)*3/2;    r = (r>255 ? 255 : (r<0? -r : r));   g = (g>255 ? 255 : (g<0? -g : g));   b = (b>255 ? 255 : (b<0? -b : b));//    r = (r>255 ? 255 : (r<0? 0 : r));//    g = (g>255 ? 255 : (g<0? 0 : g));//    b = (b>255 ? 255 : (b<0? 0 : b));   dstP[3*x] = (uchar)b;   dstP[3*x+1] = (uchar)g;   dstP[3*x+2] = (uchar)r;  } } imwrite("D:/img/冰冻.jpg",dst);} int main(){ Mat src = imread("D:/img/scene04.jpg",1); imshow("src",src); casting(src); freezing(src);  waitKey(); }

感谢各位的阅读!关于“OpenCV-Python如何实现怀旧滤镜与连环画滤镜”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!

--结束END--

本文标题: OpenCV-Python如何实现怀旧滤镜与连环画滤镜

本文链接: https://www.lsjlt.com/news/279799.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • OpenCV-Python实现怀旧滤镜与连环画滤镜
    目录怀旧滤镜实现原理实现怀旧滤镜连环画滤镜原理实现连环画滤镜熔铸算法冰冻算法怀旧滤镜实现原理 不管是荣耀华为手机还是其他的手机,我们都可以找到相机中的怀旧效果,这是手机中常用的一种滤...
    99+
    2024-04-02
  • OpenCV-Python如何实现怀旧滤镜与连环画滤镜
    这篇文章给大家分享的是有关OpenCV-Python如何实现怀旧滤镜与连环画滤镜的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。怀旧滤镜实现原理不管是荣耀华为手机还是其他的手机,我们都可以找到相机中的怀旧效果,这是...
    99+
    2023-06-15
  • Unity3D如何实现旧电视滤镜shade
    这篇文章主要介绍了Unity3D如何实现旧电视滤镜shade,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。实现思路既然是要实现旧电视的后处理效果,那么只要回忆一下那些古旧的电...
    99+
    2023-06-14
  • Python OpenCV实现3种滤镜效果实例
    目录前言浮雕滤镜效果雕刻滤镜效果凸透镜滤镜效果总结前言 本篇文章要使用OpenCV、Numpy 和Math这3个工具包实现一个简单的滤镜编辑器。在这个滤镜编辑器中,包含了3种滤镜效果...
    99+
    2024-04-02
  • canvas如何实现滤镜效果
    这篇文章给大家分享的是有关canvas如何实现滤镜效果的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。具体内容如下<!DOCTYPE html>  ...
    99+
    2024-04-02
  • Android如何实现滤镜效果ColorMatrix
    这篇文章将为大家详细讲解有关Android如何实现滤镜效果ColorMatrix,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。Android是什么Android是一种基于Linux内核的自由及开放源代码的...
    99+
    2023-06-14
  • Linux中Docker镜像如何实现文本过滤
    这篇文章主要介绍了Linux中Docker镜像如何实现文本过滤,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。文本过滤考虑先把名字为 none 的镜像从结果中过滤出来,&nbs...
    99+
    2023-06-27
  • CSS3+SVG滤镜如何实现不规则边框
    这篇文章主要介绍CSS3+SVG滤镜如何实现不规则边框,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!需求背景,给不规则图形添加边框在我们日常开发中,时长会遇到一些非矩形、非圆形的图案。类似下面这些:使用纯 CSS,搭...
    99+
    2023-06-14
  • 如何使用CSS实现简单的滤镜效果
    这篇文章主要介绍“如何使用CSS实现简单的滤镜效果”,在日常操作中,相信很多人在如何使用CSS实现简单的滤镜效果问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”如何使用CSS实...
    99+
    2024-04-02
  • 如何使用CSS滤镜实现圆角及波浪效果
    本篇内容主要讲解“如何使用CSS滤镜实现圆角及波浪效果”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“如何使用CSS滤镜实现圆角及波浪效果”吧!首先,我们来看这样...
    99+
    2024-04-02
  • 如何使用CSS滤镜实现内凹平滑圆角效果
    这篇文章给大家分享的是有关如何使用CSS滤镜实现内凹平滑圆角效果的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。使用 CSS 实现如下的布局:在 CSS 世界中,如果只是下述这种效...
    99+
    2024-04-02
  • 如何使用CSS3配合IE滤镜实现渐变和投影的效果
    本篇内容介绍了“如何使用CSS3配合IE滤镜实现渐变和投影的效果”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作