Python OpenCV图像颜色变换示例
给图像添加颜色
在使用OpenCV操作图像时,有时候需要给图像添加不同的颜色,以达到不同的风格效果。这里介绍的主要是opencv中的cv.applyColorMap()
函数。
给图像应用颜色函数cv.applyColorMap(src, colormap, dst=None)
src
:表示传入的原图;colormap
:颜色图类型(17种)。可以单独使用,也可以以一个列表的形式批量使用。
以下图举例实现:
直接上代码:
# -*-coding:utf-8-*- """ File Name: color_operation.py Program IDE: PyCharm Create File By Author: Hong """ import cv2 as cv import numpy as np color_map = [ cv.COLORMAP_AUTUMN, cv.COLORMAP_BONE, cv.COLORMAP_JET, cv.COLORMAP_WINTER, cv.COLORMAP_PARULA, cv.COLORMAP_OCEAN, cv.COLORMAP_SUMMER, cv.COLORMAP_SPRING, cv.COLORMAP_COOL, cv.COLORMAP_PINK, cv.COLORMAP_HOT, cv.COLORMAP_PARULA, cv.COLORMAP_MAGMA, cv.COLORMAP_INFERNO, cv.COLORMAP_PLASMA, cv.COLORMAP_TWILIGHT, cv.COLORMAP_TWILIGHT_SHIFTED ] def color_operation(image_path: str): img = cv.imread(image_path, cv.IMREAD_COLOR) # 以彩色模式读图像 cv.namedWindow('input', cv.WINDOW_AUTOSIZE) # 根据图像大小自动调节窗口大小 cv.imshow('input', img) index = 0 while True: dst = cv.applyColorMap(img, color_map[index % len(color_map)]) # 在原图上应用不同的颜色模式 cv.imshow('{}'.format(color_map[index % len(color_map)]), dst) index += 1 c = cv.waitKey(1000) if c == 27: break cv.destroyAllWindows() if __name__ == '__main__': path = 'images/daiyutong.png' color_operation(path)
效果展示:
图像按位操作
图像的位级操作主要包括:与、或、非、异或四种操作。
与:cv.bitwise_and(img1,img2)
,两幅图像按位进行与操作;或:cv.bitwise_or(img1, img2)
,两幅图像按位进行或操作;异或:cv.bitwise_xor(img1, img2)
,两幅图像按位进行异或操作;非:cv.bitwise_not(img)
,将图像按位取反操作。
具体代码如下:
# -*-coding:utf-8-*- """ File Name: color_operation.py Program IDE: PyCharm Create File By Author: Hong """ import cv2 as cv import numpy as np def bitwise_operation(image_path1: str, image_path2: str): img1 = cv.imread(image_path1, cv.IMREAD_COLOR) img2 = cv.imread(image_path2, cv.IMREAD_COLOR) img2 = cv.resize(img2, (300, 300)) # img1 = np.zeros((400, 400, 3), dtype=np.uint8) # 创建一个空白图像 # img1[:, :] = (255, 0, 255) # 给所有像素的b和r通道赋值 # img2 = np.zeros((400, 400, 3), dtype=np.uint8) # img2[:, :] = (0, 255, 0) # 给所有像素的g通道赋值 dst1 = cv.bitwise_and(img1, img2) # 图像的与操作 dst2 = cv.bitwise_or(img1, img2) # 图像的或操作 dst3 = cv.bitwise_xor(img1, img2) # 图像的异或操作 dst4 = cv.bitwise_not(img1) # 图像的非操作 cv.imshow('img1', img1) cv.imshow('img2', img2) cv.imshow('bitwise_and', dst1) cv.imshow('bitwise_or', dst2) cv.imshow('bitwise_xor', dst3) cv.imshow('bitwise_not', dst4) cv.waitKey(0) cv.destroyAllWindows() if __name__ == '__main__': path1 = 'images/daiyutong.png' path2 = 'images/2.png' bitwise_operation(path1, path2)
结果展示:
图像的通道操作
彩色图像由R、G、B三通道组成,我们可以分别对每个通道进行操作。主要有通道分离、通道合并、通道交换等操作。
通道分离:cv.split(img)
通道合并:cv.merge(mv)
通道交换:cv.mixChannels(src, dst, fromTo)
代码实现:
# -*-coding:utf-8-*- """ File Name: color_operation.py Program IDE: PyCharm Create File By Author: Hong """ import cv2 as cv import numpy as np def channel_operation(image_path: str): img = cv.imread(image_path, cv.IMREAD_COLOR) cv.namedWindow('input', cv.WINDOW_AUTOSIZE) cv.imshow('input', img) # 彩色图像,3个通道,每个通道都是H×W。 # 通道分离 mv = cv.split(img) print('mv[0]', mv[0]) # 图像的b通道 print('mv[1]', mv[1]) # 图像的g通道 print('mv[2]', mv[2]) # 图像的r通道 mv[0][:, :] = 255 # 给b通道上的所有像素值全部赋值为255 # 通道合并 result = cv.merge(mv) # 通道交换 dst = np.zeros(img.shape, dtype=np.uint8) cv.mixChannels([img], [dst], fromTo=[2, 0, 1, 1, 0, 2]) out = cv.cvtColor(img, cv.COLOR_BGR2RGB) # 与上面的通道交换bgr->rgb结果类似, cv.imshow('bbb', img[:, :, 0]) # 显示第1个通道 cv.imshow('ggg', img[:, :, 1]) # 显示第2个通道 cv.imshow('rrr', img[:, :, 2]) # 显示第3个通道 cv.imshow('result', result) cv.imshow('dst', dst) cv.imshow('out', out) cv.waitKey(0) cv.destroyAllWindows() if __name__ == '__main__': path = 'images/daiyutong.png' channel_operation(path)
结果展示:
到此这篇关于Python OpenCV图像颜色变换示例的文章就介绍到这了,更多相关Python OpenCV图像颜色内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
python网络编程:socketserver的基本使用方法实例分析
这篇文章主要介绍了python网络编程:socketserver的基本使用方法,结合实例形式分析了python网络编程中socketserver的基本功能、使用方法及操作注意事项,需要的朋友可以参考下2020-04-04Pytorch实现网络部分层的固定不进行回传更新问题及思路详解
这篇文章主要介绍了Pytorch实现网络部分层的固定不进行回传更新,实现思路就是利用tensor的requires_grad,每一个tensor都有自己的requires_grad成员,值只能为True和False,具体内容详情跟随小编一起看看吧2021-08-08Python 删除List元素的三种方法remove、pop、del
这篇文章主要介绍了Python 删除List元素的三种方法remove、pop、del,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧2020-11-11
最新评论