Python+OpenCV图像处理(五)—— 像素运算
2024-08-24 13:27:27
最近在忙毕业设计,只能偶尔更新博客........
一、像素的算术运算
像素的算术运算涉及加减乘除等基本运算(要进行算术运算,两张图片的形状(shape)必须一样)
代码如下:
#像素的算术运算(加、减、乘、除) 两张图片必须shape一致
import cv2 as cv
def add_demo(m1, m2): #像素的加运算
dst = cv.add(m1, m2)
cv.imshow("add_demo", dst)
def subtract_demo(m1, m2): #像素的减运算
dst = cv.subtract(m1, m2)
cv.imshow("subtract_demo", dst)
def divide_demo(m1, m2): #像素的除法运算
dst = cv.divide(m1, m2)
cv.imshow("divide_demo", dst)
def multiply_demo(m1, m2): #像素的乘法运算
dst = cv.multiply(m1, m2)
cv.imshow("multiply_demo", dst) src1 = cv.imread('E:\imageload\LinuxLogo.jpg')
src2 = cv.imread('E:\imageload\WindowsLogo.jpg')
cv.imshow('image1', src1)
cv.imshow('image2', src2) add_demo(src1, src2)
subtract_demo(src1, src2)
divide_demo(src1, src1)
multiply_demo(src1, src2) cv.waitKey(0)
cv.destroyAllWindows()
运行结果:
注意:
1.这里的的像素运算指的是多维数组对应的值进行加减乘除运算,前提是两张图片必须shape、size一样
2.在相除的时候,一个很小的数除以很大的数结果必然小,所以得出的图像几乎全黑。(黑色为0,白色为255)
3.在相乘的时候,图案“Linux”边缘上的像素并不稳定
二、像素的逻辑运算
像素的逻辑运算涉及与、或、非、异或等基本运算(要进行逻辑运算,两张图片的形状(shape)必须一样)
这里主要展示与或非的逻辑运算
代码如下:
#像素的逻辑运算(与、或、非) 两张图片必须shape一致
import cv2 as cv
def and_demo(m1, m2): #与运算 每个像素点每个通道的值按位与
dst = cv.bitwise_and(m1, m2)
cv.imshow("and_demo", dst)
def or_demo(m1, m2): #或运算 每个像素点每个通道的值按位或
dst = cv.bitwise_or(m1, m2)
cv.imshow("or_demo", dst)
def not_demo(m1): #非运算 每个像素点每个通道的值按位取反
dst = cv.bitwise_not(m1)
cv.imshow("not_demo", dst) src1 = cv.imread('E:\imageload\LinuxLogo.jpg')
src2 = cv.imread('E:\imageload\WindowsLogo.jpg')
cv.imshow('image1', src1)
cv.imshow('image2', src2) and_demo(src1, src2)
or_demo(src1, src2)
not_demo(src1) cv.waitKey(0)
cv.destroyAllWindows()
运行结果:
注意:这里的逻辑运算是按照像素点的各通道的值按二进制形式按位与或非进行运算的
三、调节图片对比度和亮度
代码如下:
#调节图片对比度和亮度
import cv2 as cv
import numpy as np
def contrast_brightness_image(img1, ratio, b): #第2个参数rario为对比度 第3个参数b为亮度
h, w, ch = img1.shape
img2 = np.zeros([h, w, ch], img1.dtype) # 新建的一张全黑图片和img1图片shape类型一样,元素类型也一样
dst = cv.addWeighted(img1, ratio, img2, 1 - ratio, b)
cv.imshow("csecond", dst)
src = cv.imread("E:\imageload\example.png")
cv.imshow("first", src)
contrast_brightness_image(src, 0.1, 10)
cv.waitKey(0)
cv.destroyAllWindows()
运行结果:
注意:help(cv2.addWeighted)可得到.addWeighted函数的官方解释。
函数addWeighted的原型:addWeighted(src1, alpha, src2, beta, gamma[, dst[, dtype]]) -> dst
src1表示需要加权的第一个数组(上述例子就是图像矩阵)
alpha表示第一个数组的权重
src2表示第二个数组(和第一个数组必须大小类型相同)
beta表示第二个数组的权重
gamma表示一个加到权重总和上的标量值
即输出后的图片矩阵:dst = src1*alpha + src2*beta + gamma;
最新文章
- 【转】Linux C动态内存泄漏追踪方法
- Ajax与json
- 在SpringMVC框架下实现数据的国际化(即数据实现多国文字之间的转换)
- android intent和intent action大全
- sqlalchemy 大全
- 快捷键的记录,Word和PPT的一些常用操作
- iOS进阶_FMDB的简单使用
- 轻松搞定javascript预解析机制(搞定后,一切有关变态面试题都是浮云~~)
- AngularJs遇到的小坑与技巧
- SystemInfo.deviceUniqueIdentifier 返回机器码
- Jquery面试题整合
- linux下的gdb调试工具--断点调试
- Yii国际化
- 我的wifi
- c++野指针 之 实战篇
- COCOS2D-X FRAME动画创作随笔
- 【可视化】div背景半透明
- EasyUI 主布局整合。
- 第24章 退出 - Identity Server 4 中文文档(v1.0.0)
- 通信导论-IP数据网络基础(3)
热门文章
- Always On 集群监听创建失败问题
- 版本控制之GitHub亲手实验总结
- python的目录
- ios9 适配的坑
- 解决办法: RSA host key for [ip address] has changed and you have requested strict checking.
- TensorFlow读取CSV数据(批量)
- Redis:Sentinel哨兵
- 工具方法 获取远程IP
- Adobe Flash Builder 调试器无法连接,无法进行调试,构建停止在57%
- InstallShield2015制作安装包----------安装后实现自动运行