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

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

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-opencv库(4)--图片像素运算,利用加权叠加调节图像对比度和亮度相关推荐

  1. opencv计算图像亮度调节_OpenCV教程创建Trackbar图像对比度、亮度值调整

    这篇文章中我们一起学习了如何在OpenCV中用createTrackbar函数创建和使用轨迹条,以及图像对比度.亮度值的动态调整. 文章首先详细讲解了OpenCV2.0中的新版创建轨迹条的函数crea ...

  2. 【OpenCV】OpenCV实战从入门到精通之 -- 图像对比度、亮度值调整

    理论依据 首先了解一下算子的概念.一般的图像处理算子都是一个函数,它接受一个或多个输入图像,并产生输出图像.下面是算子的一般形式: 或者 图像亮度和对比度的次奥做属于图像变换中比较简单的点操作(poi ...

  3. 【图像处理】OpenCV系列五 --- 图像对比度、亮度值调整

    今天呢,我们一起学习一下,如何调整图像的对比度以及亮度. 一.原理 调整图像亮度与对比度所用的公式 g(i,j) = a * f(i,j) + b 其中,i 和 j 表示像素位于第i行 和 第j列 . ...

  4. OpenCV C++ 图像对比度和亮度

    目录 知识点 亮度和对比度调整原理 示例代码 reference 知识点 在本文中将了解到以下几个方面的内容: 1.C++ OpenCV访问像素值:2.用0初始化矩阵:3.saturate_cast起 ...

  5. OpenCV 数组存储图片像素值,便于后期图像处理

    刚开始接触到OpenCV,本身是想学借助OpenCV的库来进行图像处理学习的,后来发现OpenCV将所有的东西都集成起来了,对于打算学习图像处理来说这样反而不是什么好事: 在我看来,图像处理基本基于对 ...

  6. 用python的opencv库在图片上画出蓝底黑字的文本框

    以下是使用Python的OpenCV库实现在图片上绘制的示例代码: import cv2# 读入图片 img = cv2.imread('example.jpg')# 在图片上绘制红色矩形框 cv2. ...

  7. OpenCV之图像对比度、亮度值调整

    先上代码 #include <iostream> #include <opencv2/core.hpp> #include <opencv2/highgui.hpp> ...

  8. pil库修改图片大小_python 利用PIL库进行更改图片大小的操作

    python 是可以利用PIL库进行更改图片大小的操作的,当然一般情况下是不需要的,但是在一些特殊的利用场合,是需要改变图片的灰度或是大小等的操作的,其实用python更改图片的大小还是蛮简单的,只需 ...

  9. 使用c++通过opencv库进行图片的保存

    背景:最近在做一个比赛,很多功能都实现了,但是遇到整合一起的一些问题.其中一个就是,使用c写的(中间包含一个c++代码)打开摄像头的代码通过make生成了可执行文件.同时想让可执行文件输入几张图片,用 ...

最新文章

  1. gbk与utf-8的区别
  2. 设计模式——10.单例模式
  3. 配置EIGRP默认路由
  4. [MyBatisPlus]通用Service接口测试通用Service
  5. Could not fetch URL https://pypi.org/simple/pip/: There was a problem confirming the ssl certificate
  6. linux errno 线程,Linux errno 错误对照表
  7. java设置jdk环境变量
  8. Validator验证Ajax提交表单的方法
  9. wpf 界面加载 Command
  10. 使用 Shell 脚本实现安装进度指示器
  11. 操作系统导论 书中代码下载_经典教材统计学习导论终于有Python版了(附下载)...
  12. 阶段3 1.Mybatis_09.Mybatis的多表操作_5 完成user的一对多查询操作
  13. 中冠百年|到了30岁应该如何增加收入?
  14. 英语四六级听力调频广播电台方案
  15. OpenCV第十四讲: Fast特征点与ORB特征点原理详解
  16. 用Docker和Kubernetes将MongoDB作为微服务来运行
  17. Shell脚本详解---一篇搞定
  18. oracle存档模式,oracle归档模式管理
  19. AutoCAD 2020快捷指令大全
  20. Spring Cloud教程 第七弹 spring cloud openfeign

热门文章

  1. 华为:研发协同,为什么说效率是第一重要的事儿?
  2. 可能与不可能的边界 P/NP问题趣史
  3. 蓝桥杯经典算法 不定方程解法 蓝桥杯练习系统 历届试题 买不到的数目
  4. 立白洗衣粉之老子天下第一
  5. mySql 简单 多表 联查
  6. android 特效相机实现,安卓特效相机(三) OpenGL ES 特效渲染
  7. speedoffice(Excel)如何插入子表?
  8. mac下安装centos8
  9. 数据采集---自制上位机界面接收单片机uart数据
  10. 【新闻推荐系统】(task2)mysql和pymysql使用