Python调用OpenCV实现图像反色(反相)处理

这篇具有很好参考价值的文章主要介绍了Python调用OpenCV实现图像反色(反相)处理。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1 前言

上一篇介绍了用C++如何将一幅彩色图像和灰度图像进行反色处理,本篇接着用python来做同样的事情。

图像反转,其目的就是增强图像的暗区中白色或灰色的细节,特别是原图中的阴影黑色区域。原理就是用值255减去原来像素点上的像素值,比如用255(白色)-0(黑色)得到的是255(白色)。

2 相关概念

像素:像素是图像的最小单位。每一幅图像都是由M行N列的像素组成的,其中每一个像素都存储一个像素值。

RGB图像:

每一种颜色在视觉效果上都可以由不同比例的红、绿、蓝三种颜色合成(R-red,G-green,B-blue)。RGB图像存在3个通道,即R通道、G通道和B通道。其中R通道指的是红色通道;G通道指的是绿色通道;B通道指的是蓝色通道;并且每个色彩通道都在区间[0,255]内取值。RGB图像对应的是RGB色彩空间。

灰度图像:

每个像素都是从黑到白,被处理为256个灰度级别的单色图像。这256个灰度级别分别用区间[0,255]中的数值表示。其中,“0”表示纯黑色,“255”表示纯白色,0~255的数值表示不同亮度(即色彩的深浅程度)的深灰色或者浅灰色。灰度图像对应的是GRAY色彩空间。

BGR色彩空间:

在RGB色彩空间中,彩色图像的通道顺序是R -> G -> B,但是在OpenCV中,RGB色彩空间被BGR色彩空间取代,使得彩色图像的通道顺序变成了B -> G -> R,与RGB刚好相反。

3 创建测试项目

创建测试项目、配置开发环境,具体可参考之前文章,这里就不多说了

Win10+Python3.10+OpenCV4.6.0加载显示图片_来灵的博客-CSDN博客

这次测试项目名称img_invert,VS2022种创建好的项目截图

Python调用OpenCV实现图像反色(反相)处理

将下列代码编辑到img_invert.py文件里,代码中有详细的注释

# !usr/bin/env python
# -*- coding: utf-8 -*-
import cv2
import numpy as np

#color_path:彩色图片路径
#gray_path:灰度图片路径
#dst_color_path:反色后的彩色图片路径
#dst_gray_path:反色后的灰度图片路径
def img_invert(color_path, gray_path, dst_color_path, dst_gray_path):
    #打开彩色原始图像
    img_color = cv2.imread(color_path) 
    #获取彩色图像宽、高、通道数
    height_color, width_color, channels_color = img_color.shape
    #打印彩色图像的宽、高、通道数
    print("color:width[%d],height[%d],channels[%d]" % (width_color, height_color, channels_color))

    #将彩色图像转换成灰度图像
    #注意参数2:OpenCV中彩色色彩空间是BGR,转换成灰度色彩空间GRAY
    img_gray = cv2.cvtColor(img_color, cv2.COLOR_BGR2GRAY)
    #获取灰度图像宽、高、通道数
    #height_gray, width_gray = img_gray.shape
    height_gray, width_gray = img_gray.shape[:2]
    #打印彩色图像的宽、高、通道数
    print("gray:width[%d],height[%d]" % (width_gray, height_gray))
    #保存灰度图片
    cv2.imwrite(gray_path, img_gray)

    #显示转换之前的彩色图像和灰度图像
    cv2.imshow('img_color', img_color)
    cv2.imshow('img_gray', img_gray)

    #先将彩色图像反色
    #创建空白数组
    for row in range(height_color):
        for col in range(width_color):
            for chan in range(channels_color):
                point = img_color[row, col, chan]
                img_color[row, col, chan] = 255 - point

    #显示和保存反色后彩色图像
    cv2.imshow('dst_color', img_color)
    cv2.imwrite(dst_color_path, img_color)

    #接着讲灰度图像反色
    #创建空白数组
    for row in range(height_gray):
        for col in range(width_gray):
            img_gray[row][col] = 255 - img_gray[row][col]

    #显示和保存反色后灰度图像
    cv2.imshow('dst_gray', img_gray)
    cv2.imwrite(dst_gray_path, img_gray)

    #按下任何键盘按键后退出
    cv2.waitKey()
    #销毁所有窗口
    cv2.destroyAllWindows()
    print("test end...")

if __name__ == '__main__':
    color_path = 'color.jpg'
    gray_path = 'gray.jpg'
    dst_color_path = 'dst_color.jpg'
    dst_gray_path = 'dst_gray.jpg'
    img_invert(color_path, gray_path, dst_color_path, dst_gray_path)

编辑好代码的项目截图

Python调用OpenCV实现图像反色(反相)处理

测试项目工程当前目录

Python调用OpenCV实现图像反色(反相)处理

4 效果截图

Python调用OpenCV实现图像反色(反相)处理

控制台运行截图

Python调用OpenCV实现图像反色(反相)处理

彩色和灰度原图

 Python调用OpenCV实现图像反色(反相)处理Python调用OpenCV实现图像反色(反相)处理

 反色处理后保存的图片

Python调用OpenCV实现图像反色(反相)处理Python调用OpenCV实现图像反色(反相)处理

5 总结

1,不论是对彩色图像还是灰度图像,做反转处理的原理都是一样的,即用255减去像素点上的RGB值。不同点:彩色图像是3通道,灰度图像是单通道。

    Value(目标) = 255 – Value(当前)

2,将彩色图像转换成灰度图像,使用了OpenCV的接口函数

    gray = cv2.cvtColor(color, cv2.COLOR_BGR2GRAY);

    参数说明:

    color转换前的图像(即彩色图像)

    code色彩空间转换码(本示例用的是COLOR_BGR2GRAY)

    返回值:

    gray:转换后的图像(即灰度图像)文章来源地址https://www.toymoban.com/news/detail-469033.html

到了这里,关于Python调用OpenCV实现图像反色(反相)处理的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • Opencv+Python图像像素处理

    Opencv+Python图像像素处理

    目录 二值图像的像素访问、修改 单个像素访问、修改  多个像素修改 彩色图像(三维数组) 像素访问、修改 BGR模式 像素访问、修改 单个像素访问、修改 打印结果:   多个像素修改 运行结果:  BGR模式 像素访问、修改 运行效果:    对于三维数组(BGR模式) img[0,3

    2024年02月12日
    浏览(14)
  • 《数字图像处理-OpenCV/Python》连载:形态学图像处理

    《数字图像处理-OpenCV/Python》连载:形态学图像处理

    本书京东 优惠购书链接 https://item.jd.com/14098452.html 本书CSDN 独家连载专栏 https://blog.csdn.net/youcans/category_12418787.html 形态学图像处理是基于形状的图像处理,基本思想是利用各种形状的结构元进行形态学运算,从图像中提取表达和描绘区域形状的结构信息。形态学运算的数学原

    2024年02月19日
    浏览(52)
  • Python 基于 OpenCV 视觉图像处理实战 之 OpenCV 简单实战案例 之六 简单图像倾斜校正处理效果

    Python 基于 OpenCV 视觉图像处理实战 之 OpenCV 简单实战案例 之六 简单图像倾斜校正处理效果

    目录 Python 基于 OpenCV 视觉图像处理实战 之 OpenCV 简单实战案例 之六 简单图像倾斜校正处理效果 一、简单介绍 二、简单图像倾斜校正处理效果实现原理 三、简单图像倾斜校正处理效果案例实现简单步骤 四、注意事项 Python是一种跨平台的计算机程序设计语言。是一种面向对

    2024年04月13日
    浏览(21)
  • 【OpenCV实现图像:使用OpenCV进行图像处理之透视变换】

    【OpenCV实现图像:使用OpenCV进行图像处理之透视变换】

    透视变换(Perspective Transformation)是一种图像处理中常用的变换手段,它用于将图像从一个视角映射到另一个视角,常被称为投影映射。透视变换可以用于矫正图像中的透视畸变,使得图像中的物体在新的视平面上呈现更加规则的形状。 透视变换通常涉及到寻找图像中的特定

    2024年02月03日
    浏览(18)
  • “探索图像处理的奥秘:使用Python和OpenCV进行图像和视频处理“

    “探索图像处理的奥秘:使用Python和OpenCV进行图像和视频处理“

     1、上传图片移除背景后下载。在线抠图软件_图片去除背景 | remove.bg – remove.bg 2、对下载的图片放大2倍。ClipDrop - Image upscaler  3、对放大后的下载照片进行编辑。  4、使用deepfacelive进行换脸。 1)将第三步的照片复制到指定文件夹。C:myAppdeepfakelivetempDeepFaceLive_NVIDIAuserda

    2024年02月16日
    浏览(54)
  • 《数字图像处理-OpenCV/Python》连载(41)图像的旋转

    《数字图像处理-OpenCV/Python》连载(41)图像的旋转

    本书京东优惠购书链接:https://item.jd.com/14098452.html 本书CSDN独家连载专栏:https://blog.csdn.net/youcans/category_12418787.html 几何变换分为等距变换、相似变换、仿射变换和投影变换,是指对图像的位置、大小、形状和投影进行变换,将图像从原始平面投影到新的视平面。OpenCV图像的几

    2024年02月05日
    浏览(48)
  • Python-OpenCV中的图像处理-图像梯度

    Python-OpenCV中的图像处理-图像梯度

    图像梯度,图像边界等 使用到的函数有: cv2.Sobel(), cv2.Scharr(), cv2.Laplacian() 等 原理:梯度简单来说就是求导。OpenCV 提供了三种不同的梯度滤波器,或者说高通滤波器: Sobel,Scharr 和 Laplacian。Sobel, Scharr 其实就是求一阶或二阶导数。 Scharr 是对 Sobel(使用小的卷积核求解

    2024年02月13日
    浏览(51)
  • Python-OpenCV中的图像处理-图像平滑

    Python-OpenCV中的图像处理-图像平滑

    使用低通滤波器可以达到图像模糊的目的。这对与去除噪音很有帮助。其实就是去除图像中的高频成分(比如:噪音,边界)。所以边界也会被模糊一点。(当然,也有一些模糊技术不会模糊掉边界)。 这是由一个归一化卷积框完成的。他只是用卷积框覆盖区域所有像素的平

    2024年02月13日
    浏览(13)
  • Python-OpenCV中的图像处理-图像轮廓

    Python-OpenCV中的图像处理-图像轮廓

    轮廓可以简单认为成将连续的点(连着边界)连在一起的曲线,具有相同的颜色或者灰度。轮廓在形状分析和物体的检测和识别中很有用。 为了更加准确,要使用二值化图像。在寻找轮廓之前,要进行阈值化处理或者 Canny 边界检测。 查找轮廓的函数会修改原始图像。如果你

    2024年02月13日
    浏览(14)
  • 【OpenCV实现平滑图像处理】

    【OpenCV实现平滑图像处理】

    在图像处理中,低通滤波器是一种常用的技术,用于平滑、模糊或降低图像的噪音。这种滤波器通过去除图像中高频部分(即变化较快的部分)来实现这些效果。通过应用2D卷积操作,低通滤波器将每个像素的值与其周围像素的值进行加权平均,从而实现图像的平滑处理。 在

    2024年02月08日
    浏览(10)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包