当前位置: 首页 > news >正文

flask+opencv+实时滤镜(原图、黑白、怀旧、素描)

简介:滤镜,主要是用来实现图像的各种特殊效果。图像滤镜用于改变图像的视觉效果,使其具有特定的风格。下面是这三种滤镜的详细说明:

1、黑白(Grayscale):黑白滤镜将彩色图像转换为灰度图像,即只包含灰度信息的图像。这种滤镜去除了图像的色彩,使其只保留亮度信息。黑白滤镜通常用于模拟老式照片,或者在某些场景中突出图像的纹理和形状。

2、怀旧(Sepia):怀旧滤镜(又称为 Sepia 滤镜)将彩色图像转换为具有特定色调的图像。怀旧滤镜通常使用暖色调(如褐色和黄色)来模拟古老照片的外观。这种滤镜可以给图像带来一种复古和温暖的感觉。

3、素描(Sketch):素描滤镜将彩色图像转换为类似手绘素描的图像。这种滤镜通常用于强调图像中的边缘和轮廓,使其看起来像是使用铅笔或其他绘画工具绘制的。素描滤镜可以使图像具有一种独特的艺术风格。

这些滤镜可以使图像看起来更具特色,也可以用于特定的艺术效果或视觉表达。在很多图像处理应用和软件中,这些滤镜都是常见的基本功能。

历史攻略:

flask+opencv:实时视频直播推流平台Demo

python:彩色照转黑白照

Python:使用cv2模块快速生成素描

案例源码:

# -*- coding: utf-8 -*-
# time: 2023/5/3 18:29
# file: RealTimeFilter.py
# 公众号: 玩转测试开发
import cv2
import numpy as np
from flask import Flask, Responseapp = Flask(__name__)def apply_sepia_filter(frame):sepia_filter = np.array([[0.272, 0.534, 0.131],[0.349, 0.686, 0.168],[0.393, 0.769, 0.189]])sepia_frame = cv2.transform(frame, sepia_filter)return sepia_framedef apply_sketch_filter(frame):gray_frame = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)inv_gray_frame = cv2.bitwise_not(gray_frame)blur_frame = cv2.GaussianBlur(inv_gray_frame, (13, 13), 0)sketch_frame = cv2.divide(gray_frame, 255 - blur_frame, scale=256)return cv2.cvtColor(sketch_frame, cv2.COLOR_GRAY2BGR)def apply_filter(frame):gray_frame = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)gray_frame = cv2.cvtColor(gray_frame, cv2.COLOR_GRAY2BGR)sepia_frame = apply_sepia_filter(frame)sketch_frame = apply_sketch_filter(frame)row1_frame = cv2.hconcat([frame, gray_frame])row2_frame = cv2.hconcat([sepia_frame, sketch_frame])combined_frame = cv2.vconcat([row1_frame, row2_frame])return combined_framedef generate_frames():cap = cv2.VideoCapture(0)while True:ret, frame = cap.read()if not ret:breakfiltered_frame = apply_filter(frame)_, buffer = cv2.imencode('.jpg', filtered_frame)frame = buffer.tobytes()yield (b'--frame\r\n'b'Content-Type: image/jpeg\r\n\r\n' + frame + b'\r\n')cap.release()@app.route('/video_feed')
def video_feed():return Response(generate_frames(),mimetype='multipart/x-mixed-replace; boundary=frame')@app.route('/')
def index():return """<!DOCTYPE html><html><head><title>Real-time Filter Application</title><style>body, html {margin: 0;padding: 0;height: 100%;width: 100%;}.video-container {width: 100%;height: calc(100% - 40px);display: flex;justify-content: center;align-items: center;}img {display: block;max-width: 100%;max-height: 100%;}.container {display: flex;flex-direction: column;justify-content: center;align-items: center;height: 100%;width: 100%;}.row {display: flex;width: 100%;}.column {flex: 50%;}
</style></head><body><div class="container"><div class="video-container"><img src="/video_feed" alt="Video stream not available"></div></div></body></html>"""if __name__ == '__main__':app.run(host='0.0.0.0', port=5000)

运行结果:

在这里插入图片描述

http://www.lryc.cn/news/64914.html

相关文章:

  • 【SCI征稿】极速送审,中科院2区(TOP)计算机算法类SCI,数据库稳定检索19年
  • 1992-2022年31省GDP、第一产业增加值、第二产业增加值 第三产业增加值
  • 100种思维模型之万物系统思维模型-57
  • Java 中的包装类是什么?如何使用包装类来操作基本数据类型(二十二)
  • 【Python入门】Pycharm的使用指南
  • python搭建HaIcon物联平台!
  • GUI编程(二)
  • 俩小伙一晚上写了个 AI 应用,月入两万??(文末附开发教程)
  • Python爬虫常用框架
  • 2023亚马逊云科技研究,数字化技能为中国企业和员工带来经济效益
  • springboot使用mybatis
  • 为什么是三次握手和四次挥手
  • Codeforces Round 867 (Div 3) 总结
  • vue修饰符的使用
  • 2023年五一数学建模 B 题过程与结果
  • 搞懂 API ,API 中 URI 设计规范分享
  • 【DarkLabel】使用教程(标注MOT数据集)
  • Python3 迭代器与生成器
  • C++基础 类的自动转换和强制类型转换
  • MySQL索引的底层实现原理
  • Linux 更新
  • 华为OD机试 - 端口合并(Python)
  • 分部积分法习题
  • C++—非递归【循环】遍历二叉树(前序,中序,后序)思路讲解+代码实现
  • 前端002_初始化项目
  • 组合设计模式
  • 【MySQL】多表查询
  • 关于在线帮助中心你需要思考以下几个问题
  • 基于FPGA+JESD204B 时钟双通道 6.4GSPS 高速数据采集模块设计(一)总体方案
  • 二、Spring Cloud Alibaba环境搭建