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种创建好的项目截图
将下列代码编辑到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,转换成灰度色彩空间GRAYimg_gray = cv2.cvtColor(img_color, cv2.COLOR_BGR2GRAY)#获取灰度图像宽、高、通道数#height_gray, width_gray = img_gray.shapeheight_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)
编辑好代码的项目截图
测试项目工程当前目录
4 效果截图
控制台运行截图
彩色和灰度原图
反色处理后保存的图片
5 总结
1,不论是对彩色图像还是灰度图像,做反转处理的原理都是一样的,即用255减去像素点上的RGB值。不同点:彩色图像是3通道,灰度图像是单通道。
Value(目标) = 255 – Value(当前)
2,将彩色图像转换成灰度图像,使用了OpenCV的接口函数
gray = cv2.cvtColor(color, cv2.COLOR_BGR2GRAY);
参数说明:
color:转换前的图像(即彩色图像)
code:色彩空间转换码(本示例用的是COLOR_BGR2GRAY)
返回值:
gray:转换后的图像(即灰度图像)
Python调用OpenCV实现图像反色(反相)处理相关推荐
- 使用Python、OpenCV进行图像接缝雕刻
使用Python.OpenCV进行图像接缝雕刻 1. 效果图 2. 原理 3. 安装--鉴于算法的专利原因,0.16以上版本均去掉了接缝雕刻算法: 4. 源码 参考 这篇博客将介绍基于图像内容感知调整 ...
- python调用opencv代码_Python调用OpenCV实现图像平滑代码实例
主要讲解Python调用OpenCV实现图像平滑,包括四个算法:均值滤波.方框滤波.高斯滤波和中值滤波. 给图像增加噪声: import cv2 import numpy as np def test ...
- Python调用OpenCV实现图像平滑处理
1 前言 上一节,我们介绍了C++调用OpenCV接口,如何实现对图像的平滑处理,本节我们介绍一下在Python环境下调用OPenCV接口,如何对图像进行平滑模糊处理.接下来我们依次介绍均值滤波器.中 ...
- Python,OpenCV骨架化图像并显示(skeletonize)
Python,OpenCV骨架化图像并显示(skeletonize) 1. 效果图 2. 源码 参考: 1. 效果图 自己画一张图,原图 VS 骨架效果图如下: opencv logo原图 VS 骨架 ...
- 使用Python,OpenCV制作图像Mask——截取ROIs及构建透明的叠加层
使用Python,OpenCV制作图像Mask--截取ROIs及构建透明的叠加层 1. 效果图 2. 源码 参考 这篇博客将介绍如何使用OpenCV制作Mask图像掩码.使用位运算和图像掩码允许我们只 ...
- 使用Python,OpenCV实现图像和实时视频流中的人脸模糊和马赛克
使用Python,OpenCV实现图像和实时视频流中的人脸模糊和人脸马赛克 1. 效果图 2. 原理 2.1 什么是人脸模糊,如何将其用于人脸匿名化? 2.2 执行人脸模糊/匿名化的步骤 3. 源码 ...
- 使用Python和OpenCV检测图像中的条形码
使用Python和OpenCV检测图像中的条形码 1. 效果图 2. 算法的步骤 3. 源码 参考 这篇博客将介绍使用计算机视觉和图像处理技术进行条形码检测的必要步骤,并演示使用Python编程语言和 ...
- 使用Python,OpenCV查找图像中的最亮点
Python,OpenCV找出图像中的最亮点 1. 原理 2. 优化 3. 效果图 4. 源码 参考 这篇博客将向您展示如何使用Python和OpenCV查找图像中的最亮点,以及应用单行预处理代码-- ...
- 使用Python和OpenCV在图像之间执行超快速的颜色转换
使用Python和OpenCV在图像之间执行超快速的颜色转换 1. 效果图 2. 原理 2.1 颜色转移算法 2.2 步骤 2.3 算法改进 3. 源码 参考 这篇博客将介绍如何使用Python和Op ...
- 使用Python、OpenCV翻转图像(水平、垂直、水平垂直翻转)
使用Python.OpenCV翻转图像(水平.垂直.水平垂直翻转) 1. 效果图 2. 源码 参考 这篇博客将介绍如何使用Python.OpenCV翻转图像,类似于cv2.rotate(). 沿y轴水 ...
最新文章
- C语言 矩阵的几种乘法
- 软件设计期末考试重点内容
- Rider 2021.3 Beta 现已推出
- Hadoop CDH4.5 MapReduce MRv1 HA方案实战
- group by 汇总
- 【分布式】分布式架构-ESB SOA
- 汇编语言相关图书推荐
- UniCode编码表 对照表
- 某站300买的 代shua网授权系统打包
- java 大端 小端 转换_Java 大小端转换(基于ByteBuffer)
- C语言 求平方 求开方
- mysql数据库报错1062_【1062错误 mysql】
- 服务器开机一进系统就黑屏,win7系统开机在欢迎界面直接黑屏怎么办
- yum完全配置及createrepo详解
- python股票分析系统代码_Python 代码学习,用于股票分析
- 域名防封之长城防封系统都能做什么?
- unix 简单的命令
- mysql mysqldataadapter_MySql中MySqlDataAdapter类的用法
- 1.传感器学习笔记之初次相识
- Unity3D图集图片裁剪