Python OpenCV图像颜色变换与位操作实战指南

一颗松果
一颗松果
发布时间:2026-10-15| 7人浏览过
原创

本文详解Python OpenCV中图像颜色变换与位级处理技术。通过[[wp:a0]]实现多种风格化着色,利用[[wp:a7]]等函数进行与或非异或运算,并演示[[wp:a13]]通道分离与[[wp:a15]]通道交换。附带完整代码及效果展示,适用于图像风格迁移与基础处理场景。

图像颜色变换与处理示例

在利用OpenCV进行图像处理开发时,经常需要为图像应用特定的色彩风格以增强视觉效果。本节主要讲解OpenCV库中用于颜色映射的核心函数cv.applyColorMap()的使用方法。

实现图像颜色应用的关键在于调用cv.applyColorMap(src, colormap, dst=None)。其中,参数src代表输入的原始图像数据;参数colormap指定颜色映射的类型,OpenCV提供了17种预定义的颜色图。开发者可以单独调用某一种颜色图,也可以将其放入列表中批量处理,从而快速实现不同的视觉风格。

下面通过具体图像示例来演示上述功能的应用过程。

以下是完整的Python实现代码:

# -*-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)三个颜色通道构成。在OpenCV中,我们可以对每个独立通道执行操作,主要涉及通道分离、通道合并以及通道交换等常见处理流程。

通道分离使用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 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。