Python 基于 OpenCV 视觉图像处理实战 之 OpenCV 简单实战案例 之四 简单复古怀旧照片效果
目录
[Python 基于 OpenCV 视觉图像处理实战 之 OpenCV 简单实战案例 之四 简单复古怀旧照片效果](#Python 基于 OpenCV 视觉图像处理实战 之 OpenCV 简单实战案例 之四 简单复古怀旧照片效果)
一、简单介绍
Python是一种跨平台的计算机程序设计语言。是一种面向对象的动态类型语言,最初被设计用于编写自动化脚本(shell),随着版本的不断更新和语言新功能的添加,越多被用于独立的、大型项目的开发。Python是一种解释型脚本语言,可以应用于以下领域: Web 和 Internet开发、科学计算和统计、人工智能、教育、桌面界面开发、软件开发、后端开发、网络爬虫。
这里使用 Python 基于 OpenCV 进行视觉图像处理,......
二、简单复古怀旧照片效果实现原理
复古怀旧效果通常涉及改变图像的色调、对比度和颗粒度等,以模拟老式相机或照片的效果。
怀旧风格的设计主要是在图像的颜色空间进行处理,以GRB空间为例,对R、G、B这3个通道的颜色数值进行处理,让图像有一种泛黄的老照片效果。设计的转换公式如下:
pythonR=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()