OpenCV

您所在的位置:网站首页 ps图片整体变暗 OpenCV

OpenCV

2024-07-02 22:20| 来源: 网络整理| 查看: 265

OpenCV-Python学习笔记2 变亮、变暗、日落、水印等 一、调节图像亮度1. 遍历像素点2. OpenCV原生方法来把图像变暗二、图像日落效果1. 遍历2. transform函数3. OpenCV原生方法实现夕阳效果 三、生成负片1. 每个通道单独处理2. 原生方法 四、加水印1. cv2.putText2. 实现

在这里插入图片描述

一、调节图像亮度 1. 遍历像素点

调节原理:将像素值变小,全部色彩变暗;将像素值变大,全部色彩变亮。

# -*- coding: utf-8 -*- import cv2 fn = "test.png" if __name__ == '__main__': print('loading... %s' % fn) print(u'显示原图') img = cv2.imread(fn) cv2.namedWindow('source') cv2.imshow('source', img) print(u'正在处理中') w = img.shape[1] h = img.shape[0] # 全部变暗 for xi in range(0, w): for xj in range(0, h): # 将像素值整体减少,设为原像素值的20% img[xj, xi, 0] = int(img[xj, xi, 0] * 0.2) img[xj, xi, 1] = int(img[xj, xi, 1] * 0.2) img[xj, xi, 2] = int(img[xj, xi, 2] * 0.2) # 显示进度条 if xi % 10 == 0: print('.') cv2.namedWindow('dark') cv2.imshow('dark', img) cv2.waitKey() cv2.destroyAllWindows()

这里写图片描述

变亮的代码类似,把像素值整体变大即可,如:

img[xj,xi,0]=int(img[xj,xi,0]*10.2) img[xj,xi,1]=int(img[xj,xi,1]*10.2) img[xj,xi,2]=int(img[xj,xi,2]*10.2) 2. OpenCV原生方法来把图像变暗 import cv2 import numpy as np fn = "test.png" if __name__ == '__main__': print('loading... %s' % fn) print('显示原图') img = cv2.imread(fn) cv2.namedWindow('source') cv2.imshow('source', img) print('正在处理中') # 将图像的所有像素值降低到原始值的20% img_dark = (img * 0.2).clip(0, 255).astype(np.uint8) cv2.namedWindow('dark') cv2.imshow('dark', img_dark) cv2.waitKey() cv2.destroyAllWindows()

在这里插入图片描述

二、图像日落效果 1. 遍历

将蓝色值和绿色值设为原来的70%,红色值不变。

# -*- coding: utf-8 -*- import cv2 fn = "test.png" if __name__ == '__main__': print('loading... %s' % fn) print(u'显示原图') img = cv2.imread(fn) cv2.namedWindow('source') cv2.imshow('source', img) print(u'正在处理中') w = img.shape[1] h = img.shape[0] for xi in range(0, w): for xj in range(0, h): img[xj, xi, 0] = int(img[xj, xi, 0] * 0.7) img[xj, xi, 1] = int(img[xj, xi, 1] * 0.7) # 显示进度条 if xi % 10 == 0: print('.') cv2.namedWindow('sunset') cv2.imshow('sunset', img) cv2.waitKey() cv2.destroyAllWindows()

这里写图片描述

2. transform函数

cv2.transform 是 OpenCV 中用于对图像或点集进行线性变换的函数之一。它可以对图像进行仿射变换或透视变换,也可以对点集进行线性变换,例如旋转、缩放、平移等。

函数声明如下:

dst = cv2.transform(src, m) src 是输入的图像或点集。m 是变换矩阵,通常是一个 2x3 或 3x3 的浮点型矩阵,表示变换的参数。

对于图像变换,m 是一个 2x3 矩阵,定义了一个仿射变换。对于点集变换,m 可以是一个 3x3 矩阵,定义了一个透视变换。

返回值 dst 是变换后的输出图像或点集。 3. OpenCV原生方法实现夕阳效果

下面示例 cv2.transform 来将权重矩阵应用到图像上,实现了夕阳效果。

import cv2 import numpy as np fn = "test.png" if __name__ == '__main__': print('loading... %s' % fn) print('显示原图') img = cv2.imread(fn) cv2.namedWindow('source') cv2.imshow('source', img) print('正在处理中') # 创建一个权重矩阵,将红色通道的权重增加,绿色和蓝色通道的权重降低 weights = np.array([[0.7, 0, 0], [0, 0.7, 0], [0, 0, 1]], dtype=np.float32) # 对图像应用权重矩阵 img_sunset = cv2.transform(img, weights) cv2.namedWindow('sunset') cv2.imshow('sunset', img_sunset) cv2.waitKey() cv2.destroyAllWindows() 三、生成负片 1. 每个通道单独处理 # -*- coding: utf-8 -*- import cv2 fn = "test.png" if __name__ == '__main__': print('loading... %s' % fn) print(u'显示原图') img = cv2.imread(fn) cv2.namedWindow('source') cv2.imshow('source', img) print(u'正在处理中') w = img.shape[1] h = img.shape[0] # 生成负片 b, g, r = cv2.split(img) b = 255 - b g = 255 - g r = 255 - r # 直接通过索引改变色彩分量 img[:, :, 0] = b img[:, :, 1] = g img[:, :, 2] = r cv2.namedWindow('nagative') cv2.imshow('nagative', img) cv2.waitKey() cv2.destroyAllWindows()

这里写图片描述

2. 原生方法 import cv2 fn = "test.png" if __name__ == '__main__': print('loading... %s' % fn) print('显示原图') img = cv2.imread(fn) cv2.namedWindow('source') cv2.imshow('source', img) print('正在处理中') # 生成负片 img_negative = cv2.bitwise_not(img) cv2.namedWindow('negative') cv2.imshow('negative', img_negative) cv2.waitKey() cv2.destroyAllWindows() 四、加水印 1. cv2.putText

cv2.putText 函数用于在图像上绘制文本。它允许在图像上添加指定文本,并可以控制文本的字体、大小、颜色、位置等属性。以下是 cv2.putText 函数的参数说明:

cv2.putText(img, text, org, fontFace, fontScale, color[, thickness[, lineType[, bottomLeftOrigin]]])

其中:

img: 输入图像,是一个 NumPy 数组。text: 要绘制的文本字符串。org: 文本的起始坐标(x,y),表示文本的左下角位置。fontFace: 字体类型。可以使用预定义的字体类型,例如 cv2.FONT_HERSHEY_SIMPLEX、cv2.FONT_HERSHEY_PLAIN 等。fontScale: 字体大小的缩放因子。color: 文本颜色,通常是一个包含三个整数值的元组或列表(BGR 颜色格式)。thickness: 文本的线条粗细(可选,默认为1)。lineType: 线条类型,控制文本的外观(可选,默认为cv2.LINE_AA)。bottomLeftOrigin: 可选参数,当为 True 时,坐标 org 表示文本左下角的位置;当为 False 时(默认),坐标 org 表示文本左上角的位置。 2. 实现 #-*- coding: utf-8 -*- import cv2 import numpy as np fn = "test1.jpg" if __name__ =='__main__': print('loading... %s' % fn) print (u'正在处理中') img = cv2.imread(fn) w = img.shape[1] h = img.shape[0] cv2.putText(img,"Hello World",(2,20),cv2.FONT_HERSHEY_PLAIN, 2.0, (0,0,0), thickness = 2) cv2.namedWindow('watermark') cv2.imshow('watermark', img) cv2.waitKey() cv2.destroyAllWindows()

在这里插入图片描述



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3