Python OpenCV图像颜色变换示例
作者:Hong_Youth 发布时间:2023-07-30 06:05:00
标签: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)
结果展示:
来源:https://blog.51cto.com/u_15483653/4904094
0
投稿
猜你喜欢
- 当然这应该属于正常过滤手法,而还有一种过滤HTML标签的最终极手法,则是将一对尖括号及尖括号中的所有字符均替换不显示,该方法对于内容中必须描
- 1、简介在python自动化中,我们传递一些参数是需要从文件中读取过来的,读取过来的字典并非python对象数据类型而是string类型。这
- Server对象提供对服务器上访问的方法和属性.大多数方法和属性是作为实用程序的功能提供的。语法:Server.property|metho
- Postman生成okhttp代码依赖<dependency>  
- 安全性问题一直DBA是比较关心的问题,因为建立数据库的目的就是让相关的的客户端来进行访问,所以很难避免不出现安全隐患,例如客户端链接的权限、
- 原文:Unobtrusive Ajax。今天才看见的一个Presentation,是Jesse Skinner在06年10月发表的。虽然题目
- 在SQL Server中进行开发会让你身处险地,并且寻找快速解决方案。我们编辑了前十名关于SQL Server开发的常见问题。对常见的针对表
- Frontpage中的回车键有三种:enter、shift+enter、ctrl+enter。enter键对应于HTML中的<p>
- 代码如下:Function getTreeRootId(pNodeId) getSQL = "select note_id,par
- 今天,由于工作需要,我在自己的电脑上配置了Mysql5环境,同时安装了一个phpMyAdmin管理工具,安装完成后,发现在phpMyAdmi
- 本文进通过实例,讲述通过 prototype 自定义方法的过程,旨在抛砖引玉,如果不对的地方,欢迎指正!prototype 是在 IE 4
- ASP与存储过程(Stored Procedures)的文章不少,但是我怀疑作者们是否真正实践过。我在初学时查阅过大量相关资料,发现其中提供
- 需求 Oracle调用第三方外部程序。Oracle使用sqluldr2快速导出大批量数据,然后用winrar压缩后发送邮件。源码 java
- Python 字符串格式化使用 "字符 %格式1 %格式2 字符"%(变量1,变量2),%格式表示接受变量的类型。简单的
- 滚动图片可以说是做网站经常会遇到的,特别是做企业网站,最常用的像产品展示,图片展示等,滚动的好处是吸引眼球,让人一下就注意到。之前本站发了一
- 在不同平面上绘制二维条形图。本实例制作了一个3d图,其中有二维条形图投射到平面y=0,y=1,等。演示结果:完整代码:from mpl_to
- python的pyaudio可以进行录音,播放,生成wav文件等等,WAVE是录音时用的标准的WINDOWS文件格式,文件的扩展名为WAV,
- #@project = facepalm#@file = main#@author = Maoliang Ran#@create_time
- 面对不断成长的用户,跟随用户的脚步齐步向前,做引起共鸣的改变,去除低龄化的设计,用成熟稳重的心态面对用户。QQBanner自2006 年推出
- 最近发现各大类库都能利用div.innerHTML=HTML片断来生成节点元素,再把它们插入到目标元素的各个位置上。这东西实际上就是inse