欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

荐 opencv进阶学习笔记3:像素运算和图像亮度对比度调节

程序员文章站 2023-08-27 11:00:19
基础版传送门:python3+opencv学习笔记汇总目录(适合基础入门学习)像素运算要求两张图大小,以及格式(np.uint8)完全一致,否则报错。算术运算有加减惩除。应用它调节亮度和对比度。逻辑运算:与或非,应用:遮罩层控制1.像素算术运算加法运算cv2.add(m1, m2)import cv2 as cvimport numpy as npdef add_demo(m1, m2): dst = cv.add(m1, m2) cv.imshow("add_dem...

基础版传送门:
python3+opencv学习笔记汇总目录(适合基础入门学习)

像素运算

要求两张图大小,以及格式(np.uint8)完全一致,否则报错。
算术运算有加减惩除。应用它调节亮度和对比度。
逻辑运算:与或非,应用:遮罩层控制
1.像素算术运算

加法运算
cv2.add(m1, m2)

import cv2 as cv
import numpy as np

def add_demo(m1, m2):
    dst = cv.add(m1, m2)
    cv.imshow("add_demo", dst)

print("--------- Hello Python ---------")
src1 = cv.imread("linux logo.jpg")
src2 = cv.imread("Windowslogo.jpg")
src1=cv.resize(src1,(400,300))
src2=cv.resize(src2,(400,300))
cv.imshow("image1", src1)
cv.imshow("image2", src2)
add_demo(src1, src2)#加法
cv.waitKey(0)
cv.destroyAllWindows()

黑色为0 白色为255. 相加值超过255截断。
荐
                                                        opencv进阶学习笔记3:像素运算和图像亮度对比度调节
减法运算
cv2.subtract(m1, m2)

def subtract_demo(m1, m2):
    dst = cv.subtract(m1, m2)
    cv.imshow("subtract_demo", dst)
荐
                                                        opencv进阶学习笔记3:像素运算和图像亮度对比度调节

除法运算
dst = cv2.divide(m1, m2)

def divide_demo(m1, m2):
    dst = cv.divide(m1, m2)
    cv.imshow("divide_demo", dst)

除法得到的是很小的数值,一片黑
荐
                                                        opencv进阶学习笔记3:像素运算和图像亮度对比度调节

乘法运算
dst = cv2.multiply(m1, m2)

def multiply_demo(m1, m2):
    dst = cv.multiply(m1, m2)
    cv.imshow("multiply_demo", dst)

发现原始linux图中的黑色并不是完全为0,是 接近0的存在。
荐
                                                        opencv进阶学习笔记3:像素运算和图像亮度对比度调节

均值,方差
均值:cv2.mean(src)
方差:m, dev = cv.meanStdDev(img) 返回均值和方差

import cv2 as cv
import numpy as np
print("--------- Hello Python ---------")
src1 = cv.imread("linux logo.jpg")
src2 = cv.imread("Windowslogo.jpg")
src1=cv.resize(src1,(400,300))
src2=cv.resize(src2,(400,300))
print('src1均值:',cv.mean(src1))
print('src2均值:',cv.mean(src2))

每个通道一个颜色
荐
                                                        opencv进阶学习笔记3:像素运算和图像亮度对比度调节

2.像素逻辑运算
dst = cv2.bitwise_and(m1, m2,mask)。与或非都有mask选项
为除去mask部分的图进行逻辑运算。
可以参考
opencv进阶学习笔记2:numpy操作图像,色彩空间,查找指定颜色范围,通道分离与合并

文中讲到mask运用。

与运算:dst = cv2.bitwise_and(m1, m2)

import cv2 as cv
import numpy as np

def logic_demo(m1, m2):
    dst = cv.bitwise_and(m1, m2)
    cv.imshow("logic_demo", dst)

print("--------- Hello Python ---------")
src1 = cv.imread("linux logo.jpg")
src2 = cv.imread("Windowslogo.jpg")
src1=cv.resize(src1,(400,300))
src2=cv.resize(src2,(400,300))
cv.imshow("image1", src1)
cv.imshow("image2", src2)
logic_demo(src1, src2)#与
cv.waitKey(0)
cv.destroyAllWindows()

图片格式是np.uint8 ,8位二进制,可以进行逻辑运算
荐
                                                        opencv进阶学习笔记3:像素运算和图像亮度对比度调节

或运算:dst = cv2.bitwise_or(m1, m2)
荐
                                                        opencv进阶学习笔记3:像素运算和图像亮度对比度调节
非运算:dst = cv2.bitwise_not(m1)
荐
                                                        opencv进阶学习笔记3:像素运算和图像亮度对比度调节

图像亮度对比度调节

cv2.addWeighted(图像1,系数1,图像2,系数2,亮度调节量)
亮度调节量:为给每一张图的像素加上亮度调节量。
dst = src1系数1 + src2系数2 + 亮度调节量;

import cv2 as cv
import numpy as np

def contrast_brightness_demo(image, c, b):
    h, w, ch = image.shape
    blank = np.zeros([h, w, ch], image.dtype)#空白图像,全黑
    dst = cv.addWeighted(image, c, blank, 1-c, b)
    cv.imshow("con-bri-demo", dst)
print("--------- Hello Python ---------")
src = cv.imread("andu.jpg")
cv.imshow("image", src)
contrast_brightness_demo(src, 3, 0)
cv.waitKey(0)
cv.destroyAllWindows()

其中c越大,越亮。
起作用的是系数1,和亮度调节量。
系数2乘以的是全0数组,无用,放在这里起传参作用。
荐
                                                        opencv进阶学习笔记3:像素运算和图像亮度对比度调节

电气专业的计算机萌新,写博文不容易。如果你觉得本文对你有用,请点个赞支持下。谢谢。

本文地址:https://blog.csdn.net/kobeyu652453/article/details/107249269