Python+OpenCV实现六种常用图像特效

目录

图像融合

灰度处理

颜色反转

灰度反转

彩色反转

马赛克效果

毛玻璃效果

浮雕效果

图像融合

按照一定的比例将两张图片融合在一起

addWeighted()方法:

参数1第一张图片矩阵

参数2第一张图片矩阵的权重

参数3第二张图片矩阵

参数4第二张图片矩阵的权重

融合之后的偏移量

进行叠加的两张图片宽高应该相同

叠加之后的像素偏移值如果填的话不要填太大,超过255会导致图像偏白

import cv2 import cv2 as cv img = cv.imread("img/lena.webp") tony = cv.imread("img/tony.webp", ) # 修改lena图片的宽高 融合图像之前两个图片的宽高要保持一样 height, width = img.shape[0:2] new_height = int(height * 1.5) new_width = int(width * 2) new_img = cv2.resize(img, (new_width, new_height)) # 进行叠加时的插值 dst = cv.addWeighted(new_img, 0.5, tony, 0.5, 0) cv.imshow("dst", dst) cv.waitKey(0) cv.destroyAllWindows()

灰度处理

一张彩色图片通常是由BGR三个通道叠加而成

为了便于图像特征识别,我们通常会将一张彩色图片转成灰度图片来进行分析,当我们转成灰色图片之后,图片中边缘,轮廓特征仍然是能够清晰看到的,况且在这种情况下我们仅需要对单一通道进行分析,会简化很多操作

1.前面说的可以读取图片时以灰度的方式读取

import cv2 img = cv2.imread("img/lena.webp", cv.IMREAD_GRAYSCALE)

2.BGR转灰度图

import cv2 img = cv2.imread("img/lena.webp", cv.IMREAD_COLOR) # 将原图的所有颜色转成灰色 dstImg = cv2.cvtColor(img, cv.COLOR_BGR2GRAY) cv.imshow("dstImg", dstImg) cv.waitKey(0) 颜色反转 灰度反转

灰度图中每一个像素点都是0~255组成,如果一个像素点为100,反转之后就是255 - 100 = 155

import cv2 as cv img = cv.imread("img/lena.webp", cv.IMREAD_COLOR) # 将原图的所有颜色转成灰色 dstImg = cv.cvtColor(img, cv.COLOR_BGR2GRAY) # 获取高度和宽度 height, width = dstImg.shape[0:2] # 遍历每一个像素点 for row in range(height): for col in range(width): # 255 - 每一个像素点 = 反转后的颜色 dstImg[row, col] = 255 - dstImg[row, col] cv.imshow("dstImg", dstImg) cv.waitKey(0)

彩色反转

一样的道理,彩色图片有BGR三个颜色通道,每一个颜色都取反

255 - B = B1 255 - G = G1 255 - R = R1

import cv2 as cv img = cv.imread("img/lena.webp", cv.IMREAD_COLOR) # 将原图的所有颜色转成灰色 dstImg = cv.cvtColor(img, cv.COLOR_BGR2GRAY) # 获取高度和宽度 height, width = dstImg.shape[0:2] # 遍历每一个像素点 for row in range(height): for col in range(width): # 255 - 每一个像素点 = 反转后的颜色 dstImg[row, col] = 255 - dstImg[row, col] cv.imshow("dstImg", dstImg) cv.waitKey(0)

马赛克效果

马赛克指现行广为使用的一种图像(视频)处理手段,此手段将影像特定区域的色阶细节劣化并造成色块打乱的效果,因为这种模糊看上去有一个个的小格子组成,便形象的称这种画面为马赛克。其目的通常是使之无法辨认。

import cv2 # 读取图片 cv2读取出的图片都是一个二维矩阵 img = cv2.imread('./img/lena.webp', cv2.IMREAD_COLOR) # 切片 两个点的坐标可以截取图片 # x1:x2,y1:y2 截取眼睛部分 img1 = img[180:250, 180:310] # 获取到高度和宽度 height, width = img1.shape[0:2] # 遍历每一个像素点 for row in range(height): for col in range(width): # 如果正好为10的倍数的行并且是10的倍数的列 if row % 10 == 0 and col % 10 == 0: # 获取到这个像素点的bgr三原色 b, g, r = img1[row, col] # 遍历这个像素点旁边的100个像素点 都等于中间这个像素点 for i in range(10): for j in range(10): img1[row + i, col + j] = b, g, r cv2.imshow('img', img) cv2.imwrite('msk_lena.webp', img) cv2.waitKey()

毛玻璃效果

毛玻璃效果和马赛克效果相似,马赛克是:比如4*4的像素点内所有像素点都与第一个像素点颜色一样,毛玻璃效果为遍历每一个像素点,在该像素点附近随机选取一个颜色值替换。

偏移量越大越模糊

import random import cv2 import numpy as np img = cv2.imread('./lena.webp') height, width = img.shape[0:2] new_img = np.zeros_like(img, np.uint8) # 定义偏移量 offset = 6 # 遍历每一个像素点 for row in range(height): for col in range(width): # 定义不超过1的随机值与offset相乘 index = int(random.random() * offset) # 获取到随机完的行号和列号 如果不超过总高度就使用随机的行 如果超过就使用高度-1 random_row = row + index if row + index < height else height - 1 random_col = col + index if col + index < width else width - 1 # 赋值颜色 b, g, r = img[random_row, random_col] new_img[row, col] = b, g, r cv2.imshow('img', img) cv2.imshow('new_img', new_img) cv2.waitKey()

浮雕效果

浮雕效果公式:new_gray = gray0-gray1+120

加120是为了增加灰度值

import cv2 import numpy as np img = cv2.imread('./lena.webp') # 获取高度宽度 height, width = img.shape[0:2] # 转为灰度图 gray_img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) new_img = np.zeros_like(gray_img, np.uint8) # 遍历每一个像素点 for row in range(height): # 因为要获取相邻的像素点 防止下标越界提前遍历的时候宽度-1 for col in range(width - 1): # 获取像素点的像素值 gray0 = gray_img[row, col] # 获取相邻像素点的像素值 gray1 = gray_img[row, col + 1] # 使用浮雕效果的公式 new_gray = int(gray0) - int(gray1) + 120 # 判断新的灰度值是否越界 if new_gray > 255: new_gray = 255 elif new_gray < 0: new_gray = 0 # 赋值 new_img[row, col] = new_gray cv2.imshow('img', img) cv2.imshow('new_img', new_img) cv2.waitKey()

到此这篇关于Python+OpenCV实现六种常用图像特效的文章就介绍到这了,更多相关Python OpenCV图像特效内容请搜索易知道(ezd.cc)以前的文章或继续浏览下面的相关文章希望大家以后多多支持易知道(ezd.cc)!

推荐阅读

    opporeno8参数配置及价格

    opporeno8参数配置及价格,面部,亿元,Oppo的荣誉2020年1月4日,接近屏幕关闭传感器是否支持双卡:支持oppor11splus什么时候上市的Oppo R11S P

    魅蓝note6性能参数有哪些

    魅蓝note6性能参数有哪些,摄像头,蓝牙,魅蓝note6性能参数有哪些魅力蓝色Note6最好拍照。电池寿命更长。蓝色Note6使用高通 snapdragon 625

    设置总账参数|用友u8设置总账参数

    设置总账参数|用友u8设置总账参数,,1. 用友u8设置总账参数1、首先要点开数据权限控制设置;2、选择想要设置控制的单据;3、打开后看到左上角

    csgo参数设置|csgo怎么保存

    csgo参数设置|csgo怎么保存,,csgo怎么保存第一步下载csgo的官方版本。然后再下载一个5e对战平台,PS:5e的账号和csgo的账号不是一个账号。第

    移动apn设置|移动apn设置参数

    移动apn设置|移动apn设置参数,,移动apn设置参数1、打开手机系统设置界面应用,点击页面中的“移动网络”设置选项。2、进入移动网络设置页面

    均线最佳设置|均线最佳参数设置

    均线最佳设置|均线最佳参数设置,,1. 均线最佳参数设置所有指标包括kd macd均线,是根据已有价格计算得出,看指标落后于看价格分析,也就是k线。

    viv0nex参数配置|viv0x60参数

    viv0nex参数配置|viv0x60参数,,1. viv0nex参数配置运行内存:6GB机身容量:128GB电池类型:锂聚合物电池2. viv0x60参数没有15+256,所谓的15是内存

    天线参数设置|天线参数设置图

    天线参数设置|天线参数设置图,,1. 天线参数设置图一般卫星天线的参数无需用户手动设置,将天线正确安装后,使用接收器的自动搜台功能进行搜台