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

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


http://www.kler.cn/a/580995.html

相关文章:

  • 2025年【A特种设备相关管理】免费试题及A特种设备相关管理模拟考试题库
  • RuoYi-Vue若依框架-若依如何去除页面验证码
  • 网络安全三大认证高频考点解析
  • HMT-UNet模型详解及代码复现
  • QML编程中的性能优化
  • FTL算法
  • Linux mount与umount以及机器重启后自动mount
  • 深入了解住宅IP:跨境电商中的重要工具
  • 深陷帕金森困境,怎样重燃生活信心?
  • 力扣:2012.数组美丽值求和
  • 【Python】dash-fastapi前后端搭建
  • WPF与其他技术的集成:与 WinForms、WCF 等协同工作
  • 机器学习之监督学习
  • go的”ambiguous import in multiple modules”
  • SmartDeblur深度解析:全能型图片编辑器,老照片修复利器
  • 串口通信ASCII码转16进制及C#串口编程完整源码下载
  • ORACLE EBS数据库RELINK方式搭建克隆环境
  • C++理解模板类型推导
  • 基于Golang的微服务——Consul
  • 【Prometheus】层层解析prometheus如何监控k8s核心组件