热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

python3-opencv库(4)--图片像素运算,利用加权叠加调节图像对比度和亮度

版权声明:转载请注明原作者及出处本文所涉及的一切图像像素运算,前提都是两张图尺寸相同,通道数相同importnumpyasnpfromcv2importcv2像素

版权声明:转载请注明原作者及出处

本文所涉及的一切图像像素运算,前提都是两张图尺寸相同,通道数相同

import numpy as np
from cv2 import cv2

"""像素运算分为算术运算和逻辑运算,两张图像若想进行像素运算,二者形状必须一致,
数据类型也必须一致"""

"""算术运算有加减乘除,加权叠加,可以用来调节亮度和对比度"""
"""逻辑运算分为与,或,非,可进行遮罩层控制"""
#只有黑白二色的图像,我们称之为mask
#图像的加减乘除都是元素对元素的运算
#==========================算术运算====================================================
def add_demo(img1,img2):
    """像素各个通道对应相加,超过255的截断为255"""
    """白色加任何颜色都是白色,相当于白色覆盖一切"""
    """黑色加任何颜色都不改变原来的颜色,黑色相当于透明"""
    dst = cv2.add(img1,img2)
    cv2.imshow("add_dst",dst)

def subtract_demo(img1,img2):
    """像素各个通道对应相减,小于零的截断为零"""
    """白色减其他颜色结果不定,会得到五颜六色的结果"""
    """任何颜色减白色都使得像素小于零,截断为零,得到黑色"""
    """黑色减任何颜色会使得该像素小于零,小于零则截断为零,黑色减任何颜色得到黑色"""
    """任何颜色减黑色保持原颜色不变"""
    dst = cv2.subtract(img1,img2)
    cv2.imshow("subtract_dst",dst)
    
def divide_demo(img1,img2):
    dst = cv2.divide(img1,img2)
    cv2.imshow("divide_dst",dst)

def multiply_demo(img1,img2):
    dst = cv2.multiply(img1,img2)
    cv2.imshow("multiply_dst",dst)
#=========================像素统计=====================================================
def average(img1,img2):
    """展示BGR三个通道各自的平均值"""
    """可以用来统计整幅图像中,BGR中哪种颜色所占比例最大,哪种又是最小"""
    mean1 = cv2.mean(img1)
    mean2 = cv2.mean(img2)
    print(mean1)
    print(mean2)
    
def mean_dev(img1,img2):
    """方法cv2.meanStdDev()不仅可以求出各通道均值,还能求出各通道标准差"""
    """标准差越大说明各个像素之间差异越大"""
    """标准差可以用来判断一张图像是否含有有效信息,标准差过小肯定有问题(纯色图标准差为0)"""
    mean1, dev1 = cv2.meanStdDev(img1)
    mean2, dev2 = cv2.meanStdDev(img2)
    print(mean1)
    print(mean2)
    print(dev1)
    print(dev2)
#==========================逻辑运算====================================================
def logic_and_demo(img1,img2):
    """逻辑与运算,只有两个bit都是1时,两bit的与运算结果才为1"""
    """黑色BGR(0,0,0)数据类型为uint8,所以二进制形态为00000000"""
    """白色BGR(255,255,255)数据类型为uint8,二进制形态为11111111"""
    """由此可见黑色像素与任何颜色进行与运算结果都为黑色,黑色遮挡一切"""
    """白色像素和任何颜色像素进行与运算结果都为原来的颜色,白色相当于透明"""
    dst = cv2.bitwise_and(img1,img2)
    #注意,若img1或img2中有一个是mask,则它可以作为遮罩层
    cv2.imshow("logic_and_dst",dst)
    
def logic_or_demo(img1,img2):
    """两bit进行或运算,两bit中只要与一个为1,则结果为1"""
    """任何颜色与黑色进行或运算,结果都保持原来的颜色"""
    """任何颜色与白色进行或运算,结果都为白色"""
    dst = cv2.bitwise_or(img1,img2)
    cv2.imshow("logic_or_dst",dst)
    
def logic_not_demo(img1):
    """bit_wise_not其实是按位取反,即像素的某个通道二进制形态为10010011,则变为01101100"""
    """注意01101100+10010011=11111111,即255"""
    dst = cv2.bitwise_not(img1)
    cv2.imshow("logic_not_dst",dst)
#============图像对比度与亮度==================================================================
def contrast_brightness_demo(img,c,b):
    """利用图像的加权叠加来实现对比度的调整,以及亮度的调整,c代表对比度,b代表亮度"""    
    h, w, ch = img.shape #求出img的高和宽和通道数
    blank = np.zeros([h,w,ch],dtype=np.uint8) #生成一张纯黑色图像
    dst = cv2.addWeighted(img,c,blank,1-c,b)
    #cv2.addWeighted()方法表示将img和blank两张图,按照c和1-c的比例加权叠加
    #由于blank是一张纯黑色的图,所有像素都是0,所以等价于将img的所有像素值乘上c(c>1也可以)
    #乘上c之后,2变4,4变8,不同像素之间的差异也就变大了,及对比度提高
    #b表示每个像素的每个通道的值加上b,也就是亮度提高
    cv2.imshow("cb_dst",dst)
#============================================================================== 

    
print("--------------------hello python!--------------------")
#载入素材图像
src1 = cv2.imread("D:/Picture/wallhaven-2712.jpg")
src2 = cv2.imread("D:/Picture/wallhaven-4543.jpg")
print(src1.shape,src2.shape)
src3 = np.zeros([720,1280,3],dtype=np.uint8) 
src3.fill(255) #创建纯白图像以备使用
src4 = np.zeros([720,1280,3],dtype=np.uint8) #创建纯黑图像以备使用

#==============================================================================
add_demo(src1,src3)
subtract_demo(src1,src3)
divide_demo(src3,src1)
multiply_demo(src1,src2)
average(src1,src2)
mean_dev(src1,src2)
logic_and_demo(src1,src2)
logic_or_demo(src1,src2)
logic_not_demo(src1)
contrast_brightness_demo(src1,2,20)
#==============================================================================
cv2.waitKey(0)

cv2.destroyAllWindows()



推荐阅读
  • Python3怎么获取文件属性
    这篇文章给大家分享的是有关Python3怎么获取文件属性的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。os.stat(path ... [详细]
  • 在Android开发中,使用Picasso库可以实现对网络图片的等比例缩放。本文介绍了使用Picasso库进行图片缩放的方法,并提供了具体的代码实现。通过获取图片的宽高,计算目标宽度和高度,并创建新图实现等比例缩放。 ... [详细]
  • 本文介绍了C#中生成随机数的三种方法,并分析了其中存在的问题。首先介绍了使用Random类生成随机数的默认方法,但在高并发情况下可能会出现重复的情况。接着通过循环生成了一系列随机数,进一步突显了这个问题。文章指出,随机数生成在任何编程语言中都是必备的功能,但Random类生成的随机数并不可靠。最后,提出了需要寻找其他可靠的随机数生成方法的建议。 ... [详细]
  • 微软头条实习生分享深度学习自学指南
    本文介绍了一位微软头条实习生自学深度学习的经验分享,包括学习资源推荐、重要基础知识的学习要点等。作者强调了学好Python和数学基础的重要性,并提供了一些建议。 ... [详细]
  • Java实战之电影在线观看系统的实现
    本文介绍了Java实战之电影在线观看系统的实现过程。首先对项目进行了简述,然后展示了系统的效果图。接着介绍了系统的核心代码,包括后台用户管理控制器、电影管理控制器和前台电影控制器。最后对项目的环境配置和使用的技术进行了说明,包括JSP、Spring、SpringMVC、MyBatis、html、css、JavaScript、JQuery、Ajax、layui和maven等。 ... [详细]
  • 本文介绍了在CentOS上安装Python2.7.2的详细步骤,包括下载、解压、编译和安装等操作。同时提供了一些注意事项,以及测试安装是否成功的方法。 ... [详细]
  • Windows7 64位系统安装PLSQL Developer的步骤和注意事项
    本文介绍了在Windows7 64位系统上安装PLSQL Developer的步骤和注意事项。首先下载并安装PLSQL Developer,注意不要安装在默认目录下。然后下载Windows 32位的oracle instant client,并解压到指定路径。最后,按照自己的喜好对解压后的文件进行命名和压缩。 ... [详细]
  • 本文介绍了OpenStack的逻辑概念以及其构成简介,包括了软件开源项目、基础设施资源管理平台、三大核心组件等内容。同时还介绍了Horizon(UI模块)等相关信息。 ... [详细]
  • 本文讨论了在VMWARE5.1的虚拟服务器Windows Server 2008R2上安装oracle 10g客户端时出现的问题,并提供了解决方法。错误日志显示了异常访问违例,通过分析日志中的问题帧,找到了解决问题的线索。文章详细介绍了解决方法,帮助读者顺利安装oracle 10g客户端。 ... [详细]
  • 合并列值-合并为一列问题需求:createtabletab(Aint,Bint,Cint)inserttabselect1,2,3unionallsel ... [详细]
  • Python3+Appium安装使用教程
    一、安装我们知道selenium是桌面浏览器自动化操作工具(WebBrowserAutomation)appium是继承selenium自动化思想旨在使手机app操作也能自动化的工具(Mo ... [详细]
  • 浅谈Python3中打开文件的方式(With open)
    浅谈Python3中打开文件的方式(With open)-目录0.背景知识1.常规方式:读取文件-----open()2.推荐方式:读取文件-----WithOpen1).读取方式 ... [详细]
  • Python实现变声器功能(萝莉音御姐音)的方法及步骤
    本文介绍了使用Python实现变声器功能(萝莉音御姐音)的方法及步骤。首先登录百度AL开发平台,选择语音合成,创建应用并填写应用信息,获取Appid、API Key和Secret Key。然后安装pythonsdk,可以通过pip install baidu-aip或python setup.py install进行安装。最后,书写代码实现变声器功能,使用AipSpeech库进行语音合成,可以设置音量等参数。 ... [详细]
  • Spring特性实现接口多类的动态调用详解
    本文详细介绍了如何使用Spring特性实现接口多类的动态调用。通过对Spring IoC容器的基础类BeanFactory和ApplicationContext的介绍,以及getBeansOfType方法的应用,解决了在实际工作中遇到的接口及多个实现类的问题。同时,文章还提到了SPI使用的不便之处,并介绍了借助ApplicationContext实现需求的方法。阅读本文,你将了解到Spring特性的实现原理和实际应用方式。 ... [详细]
  • python教程分享Python获取时光网电影数据的实例代码
    一、前言有时候觉得电影真是人类有史以来最伟大的发明,我喜欢看电影,看电影可以让我们增长见闻,学习知识。从某种角度上而言,电影凭借自身独有的魅力大大延长了人类的”寿命&r ... [详细]
author-avatar
尚福惠珠綺裕
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有