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

OpenCV应用:三种图像风格化案例

OpenCV 本身主要用于计算机视觉任务,例如图像处理、边缘检测、物体识别等,虽然它并不直接提供像 Photoshop 或其他艺术设计软件那样的 "风格化" 功能,但你可以通过一些图像处理技术在 OpenCV 中实现不同风格化效果。

1. 卡通化效果(Cartoonization)

卡通化效果通过边缘检测和色彩简化来模仿卡通风格,通常分为两个步骤:

  • 边缘检测:用边缘检测算法(如 Canny 边缘检测)提取图像的轮廓。
  • 色彩平滑化:使用高斯模糊或双边滤波来平滑图像,使其更符合卡通风格。

class FrameObject:
    def __init__(self):
        self.init_parameters()
    def init_parameters(self, *args, **kwargs):
        pass
    def do(self, frame, device):
        gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
    
    # 进行中值模糊
        gray = cv2.medianBlur(gray, 11)

    # 边缘检测
        edges = cv2.adaptiveThreshold(gray, 255,
                                  cv2.ADAPTIVE_THRESH_MEAN_C,
                                  cv2.THRESH_BINARY, 9, 9)

    # 应用双边滤波
        color = cv2.bilateralFilter(frame, 9, 300, 300)

    # 将边缘与滤波后的图像合成
        cartoon = cv2.bitwise_and(color, color, mask=edges)
        return cartoon

2. 素描效果(Sketch Effect)

素描风格可以通过将图像转换为灰度并进行边缘检测,然后与原图混合来生成类似素描的效果。

class FrameObject:
    def __init__(self):
        self.init_parameters()
    def init_parameters(self, *args, **kwargs):
        pass
    def do(self, frame, device):
        gray_image = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
    
    # 反转灰度图像
        inverted_gray = 255 - gray_image
    
    # 高斯模糊反转图像
        blurred = cv2.GaussianBlur(inverted_gray, (111, 111), 0)
    
    # 反转模糊图像
        inverted_blurred = 255 - blurred
    
    # 创建素描效果
        sketch = cv2.divide(gray_image, inverted_blurred, scale=256.0)
    
        return sketch

3.马赛克效果(Mosaic)

class FrameObject:
    def __init__(self):
        self.init_parameters()
    def init_parameters(self, *args, **kwargs):
        pass
    def do(self, frame, device):
        block_size = 10
        h, w, _ = frame.shape
        for y in range(0, h, block_size):
            for x in range(0, w, block_size):
                block = frame[y:y+block_size, x:x+block_size]
                color = np.mean(block, axis=(0, 1)).astype(int)  # 计算块的平均颜色
                frame[y:y+block_size, x:x+block_size] = color  # 填充颜色
        return frame

相关文章:

  • 【AIoT】智能硬件GPIO通信详解(一)
  • Java集成InfluxDB
  • linux 内网下载 yum 依赖问题
  • 【数据库系统概论】第七章 数据库设计
  • 王道操作系统笔记第四章-文件管理(非常完整!包学包会!融入笔者自己的思考!)
  • Vue3实战学习(IDEA中打开、启动与搭建Vue3工程极简脚手架教程(2025超详细教程)、Windows系统命令行启动Vue3工程)(2)
  • 整理一下高级设施农业栽培学这门课程的所有知识点
  • 清华同方超翔Z860装win10系统教程(兆芯KX-7000处理器装win10)
  • 高品质汉化解锁!
  • 中性点直接接地电网接地故障Simulink仿真
  • 如果布隆过滤器挂了,里边存的数据全丢失了,怎么恢复呢?
  • HTML5 表单属性
  • 字符串习题
  • 【Deepseek应用】调用 Zotero 阅读和分析文献(下)
  • SQL Server 与 MySQL 的库同步工具推荐
  • 前端充电 - 移动端 - 小程序登录、跳转/嵌入H5页面
  • MyBatis多表查询实现方式
  • 【技术白皮书】内功心法 | 第一部分 | IP协议的目的与工作原理(IP地址)
  • Linux 生成静态库
  • yarn install时报错certificate has expired
  • wordpress网站公告/北京seo学校
  • 上海哪家做网站好/如何做seo
  • 帮人做网站被派出所抓到徐州/网页模板之家
  • 康定网站建设公司/千度seo
  • 柳林网站建设/品牌推广战略
  • 网站索引量下降/如何做网销