Python 基于 OpenCV 视觉图像处理实战 之 OpenCV 简单实战案例 之四 简单复古怀旧照片效果

news/2024/7/21 4:18:14 标签: python, opencv, 图像处理, 复古怀旧, 怀旧风格

Python 基于 OpenCV 视觉图像处理实战 之 OpenCV 简单实战案例 之四 简单复古怀旧照片效果

目录

Python 基于 OpenCV 视觉图像处理实战 之 OpenCV 简单实战案例 之四 简单复古怀旧照片效果

一、简单介绍

二、简单复古怀旧照片效果实现原理

三、简单复古怀旧照片效果案例实现简单步骤


一、简单介绍

Python是一种跨平台的计算机程序设计语言。是一种面向对象的动态类型语言,最初被设计用于编写自动化脚本(shell),随着版本的不断更新和语言新功能的添加,越多被用于独立的、大型项目的开发。Python是一种解释型脚本语言,可以应用于以下领域: Web 和 Internet开发、科学计算和统计、人工智能、教育、桌面界面开发、软件开发、后端开发、网络爬虫。

这里使用 Python  基于 OpenCV 进行视觉图像处理,......

二、简单复古怀旧照片效果实现原理

复古怀旧效果通常涉及改变图像的色调、对比度和颗粒度等,以模拟老式相机或照片的效果。

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

python">R=0.393×r+0.769×g+0.189×b

G=0.349×r+0.686×g+0.168×b

B=0.272×r+0.534×g+0.131×b

其中,r、g、b分别代表输入的原图某一点图像像素的RGB值;R、G、B代表了该点变换后的RGB值,注意变换后的RGB值要约束在0~255之间。

三、简单复古怀旧照片效果案例实现简单步骤

1、编写代码

2、运行效果

3、具体代码

python">"""
复古怀旧风格
    怀旧风格的设计主要是在图像的颜色空间进行处理,
    以GRB空间为例,对R、G、B这3个通道的颜色数值进行处理,
    让图像有一种泛黄的老照片效果。设计的转换公式如下:
        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)
"""

import cv2
import numpy as np


def RetroEffect(img):
    """
    复古怀旧风格
    :param img:
    :return:
    """
    copy_img = img.copy()

    height, width, n = img.shape

    # 遍历像素处理
    for i in range(height):
        for j in range(width):
            b = img[i, j][0]
            g = img[i, j][1]
            r = img[i, j][2]

            # 计算新的图像中的 RGB 值
            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)

            # 约束图像像素值,防止溢出
            copy_img[i, j][0] = max(0, min(B, 255))
            copy_img[i, j][1] = max(0, min(G, 255))
            copy_img[i, j][2] = max(0, min(R, 255))

        # 添加颗粒效果
        # noise = np.random.normal(0, 0.3, img.shape).astype(np.uint8)
        # copy_img = cv2.add(copy_img, noise)

    return copy_img


def main():
    img = cv2.imread("Images/DogFace.jpg")
    retro_img = RetroEffect(img)

    # 设置窗口属性,并显示图片
    cv2.namedWindow("Dog", cv2.WINDOW_KEEPRATIO)
    cv2.imshow("Dog", img)

    # 设置窗口属性,并显示图片
    cv2.namedWindow("retro_img", cv2.WINDOW_KEEPRATIO)
    cv2.imshow("retro_img", retro_img)

    cv2.waitKey(0)
    cv2.destroyAllWindows()


if __name__ == '__main__':
    main()


http://www.niftyadmin.cn/n/5443828.html

相关文章

Qt | QWidget 自定义消息处理函数(捕获调试信息),调试和测试必不可少

# 01 函数qInstallMessageHandler qInstallMessageHandler 是 Qt 中用于安装自定义消息处理函数的函数。在 Qt 应用程序中,可以使用 qInstallMessageHandler 来接管 Qt 的消息输出,以便自定义消息的处理和记录。 #02 myMessageOutput(QtMsgType type, const QMessageLogCont…

ISO 8601:日期和时间的国际标准

ISO 8601 介绍 ISO 8601,介绍一下 ISO 8601 是由国际标准化组织(International Organization for Standardization,ISO)发布的国际标准,其全称为《数据存储和交换形式信息交换日期和时间的表示方法》。 这一标准提供了…

【目标检测-复制粘贴数据增强】

复制粘贴数据增强 在目标检测、分类和分割任务中,复制粘贴数据增强(Copy-Paste Data Augmentation)是一种创新的数据增广技术,它通过将训练集中的一部分物体实例复制并粘贴到其他图像的合理位置上,以生成新的训练样本…

Linux查看磁盘文件系统挂载信息df -h

vd代表:virtual disk 虚拟硬盘之意 vdb代表:第二块(b)虚拟硬盘之意 vdb盘挂载到了 /mnt/data目录下了

Electron 原生 UI 元素集成实践

Electron原生UI元素集成实践:菜单、托盘图标和对话框的运用 创建主菜单添加系统托盘图标使用对话框使用系统通知实现上下文菜单(右键菜单)结语 在 Electron 中,我们不仅可以利用 HTML5 和 JavaScript 构建应用程序的核心界面&…

Linux: 线程安全

Linux 线程共享了进程的资源(地址空间, 页表等), 多个线程同时访问同一个资源就可能产生问题:数据竞争 临界资源: 多个线程共享的资源临界区: 访问临界资源的区域互斥: 任何时刻, 只有一个执行流能进入临界区同步: 以一定顺序访问临界资源原子性: 要么完成, 玩么未完成 锁 死…

字体测试集:选取、应用与兼容性指南

1. 字体测试集 本人非专业字体工作者,字体测试集为个人经验总结整理,仅供参考 那时,天下人的口音、言语都是一样。 南去經三國,東來過五湖 南去经三国,东来过五湖 永东国酬爱郁灵鹰袋 0Oo1lI ga The quick brown fox j…

泛型可空类型Nullable<T>

.Net Framework 4.8版本开始&#xff0c;引入了可空类型Nullable<T>. 对于引用类型的变量来说&#xff0c;如果未赋值&#xff0c;默认情况下是 Null 值&#xff0c; 对于值类型的变量&#xff0c;如果未赋值&#xff0c;整型变量的默认值为 0,Boolean默认为false&…