Python OpenCV图像颜色变换示例

 更新时间:2022年01月10日 15:29:28   作者:Hong_Youth  
大家好,本篇文章主要讲的是Python OpenCV图像颜色变换示例,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下

给图像添加颜色

在使用OpenCV操作图像时,有时候需要给图像添加不同的颜色,以达到不同的风格效果。这里介绍的主要是opencv中的cv.applyColorMap()函数。

给图像应用颜色函数cv.applyColorMap(src, colormap, dst=None)
src:表示传入的原图;
colormap:颜色图类型(17种)。可以单独使用,也可以以一个列表的形式批量使用。

以下图举例实现:

OpenCV-Python图像颜色变换_opencv

直接上代码:

# -*-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)

效果展示:

OpenCV-Python图像颜色变换_计算机视觉_02

图像按位操作

图像的位级操作主要包括:与、或、非、异或四种操作。

与: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)

结果展示:

OpenCV-Python图像颜色变换_python_03

图像的通道操作

彩色图像由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)

结果展示:

OpenCV-Python图像颜色变换_ide_04

到此这篇关于Python OpenCV图像颜色变换示例的文章就介绍到这了,更多相关Python OpenCV图像颜色内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • python版本的读写锁操作方法

    python版本的读写锁操作方法

    这篇文章主要介绍了python版本的读写锁操作方法,结合实例形式分析了Python读写锁机制的原理与实现技巧,需要的朋友可以参考下
    2016-04-04
  • python网络编程:socketserver的基本使用方法实例分析

    python网络编程:socketserver的基本使用方法实例分析

    这篇文章主要介绍了python网络编程:socketserver的基本使用方法,结合实例形式分析了python网络编程中socketserver的基本功能、使用方法及操作注意事项,需要的朋友可以参考下
    2020-04-04
  • Pytorch实现网络部分层的固定不进行回传更新问题及思路详解

    Pytorch实现网络部分层的固定不进行回传更新问题及思路详解

    这篇文章主要介绍了Pytorch实现网络部分层的固定不进行回传更新,实现思路就是利用tensor的requires_grad,每一个tensor都有自己的requires_grad成员,值只能为True和False,具体内容详情跟随小编一起看看吧
    2021-08-08
  • 使用Python实现给企业微信发送消息功能

    使用Python实现给企业微信发送消息功能

    本文将介绍如何使用python3给企业微信发送消息,文中有详细的图文解说及代码示例,对正在学习python的小伙伴很有帮助,需要的朋友可以参考下
    2021-12-12
  • python脚本框架webpy的url映射详解

    python脚本框架webpy的url映射详解

    这篇文章主要为大家介绍了python脚本框架web.py的url映射的示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步
    2021-11-11
  • python识别验证码的思路及解决方案

    python识别验证码的思路及解决方案

    在本篇内容里小编给大家整理的是一篇关于python识别验证码的思路及解决方案,有需要的朋友们可以参考下。
    2020-09-09
  • Python编写memcached启动脚本代码实例

    Python编写memcached启动脚本代码实例

    这篇文章主要介绍了Python编写memcached启动脚本代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-08-08
  • Python深入学习之上下文管理器

    Python深入学习之上下文管理器

    这篇文章主要介绍了Python深入学习之上下文管理器,上下文管理器是在Python2.5加入的功能,它能够让你的代码可读性更强并且错误更少,和C#中的using语句类似,需要的朋友可以参考下
    2014-08-08
  • Python 删除List元素的三种方法remove、pop、del

    Python 删除List元素的三种方法remove、pop、del

    这篇文章主要介绍了Python 删除List元素的三种方法remove、pop、del,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-11-11
  • 浅析python中的绝对导入和相对导入

    浅析python中的绝对导入和相对导入

    这篇文章主要是想和大家简单聊聊python中绝对导入和相对导入的相关知识,文中的示例代码讲解详细,具有一定的借鉴价值,需要的可以参考下
    2023-09-09

最新评论