小强学Python+OpenCV之-1.4.3图像(矩阵)加减运算

栏目: 编程工具 · 发布时间: 7年前

内容简介:小强学Python+OpenCV之-1.4.3图像(矩阵)加减运算
小强学Python+OpenCV之-1.4.3图像(矩阵)加减运算

引入

问题引入,考虑以下几个问题: Q1. 一个3通道像素p的BGR分量(8bit表示)值均相同,那么这个像素是什么颜色的? Q2. 该像素p加上自己,即,像素p的各个通道值翻倍,那么这个像素的颜色会变成什么样?

加法

假设p的BGR值均为100,即p(100, 100, 100)。那么,我们生成一幅100*100大小的3通道图像,其中每个像素均与p相同。

# 导入库 import numpy as np import cv2  # 构造图像,shape为(100, 100, 3) ,每个像素值均为(100, 100, 100) gray = np.ones((100, 100, 3), dtype=np.uint8) * 100  # 显示图像 cv2.imshow("Gray", gray)  cv2.waitKey(0)

执行脚本

小强学Python+OpenCV之-1.4.3图像(矩阵)加减运算

没错,是一幅灰度图像。我们可以继续尝试,加入如下代码。

# 构造一幅(50, 256, 3) 灰度条 # 灰度条第一列像素 bar = np.ones((50,1,3), dtype=np.uint8) * 0  # 迭代生成其它列 for i in np.arange(1, 256 ):     col = np.ones((50, 1, 3), dtype=np.uint8) * i     # 数组连接,沿轴1方向(沿高度方向?)     bar = np.concatenate((bar, col), axis = 1)  cv2.imshow("Bar", bar)

执行脚本。

小强学Python+OpenCV之-1.4.3图像(矩阵)加减运算

这和我们的单通道灰度图像是一致的。也就是说, A1. 三通道图像的每个通道值(强度)相同时,合成的是灰度图像。

那么,如果将上面的图像gray的每个像素值加上(100, 100, 100)会怎样呢?

# 构造图像,shape为(100, 100, 3) ,每个像素值均为(100, 100, 100) M = np.ones((100, 100, 3), dtype=np.uint8) * 100  # 第一次,对每个像素加上(100, 100, 100) gray = gray + M  # 显示图像 cv2.imshow("Gray1", gray)  # 第二次,对每个像素加上(100, 100, 100) gray = gray + M  # 显示图像 cv2.imshow("Gray2", gray)  cv2.waitKey(0)

执行脚本。

小强学Python+OpenCV之-1.4.3图像(矩阵)加减运算

Gray1在Gray的基础上强度增强了,这是可以理解的,因为,每个像素的强度都增加了(100,100,100)。那么,为什么Gray2怎么会比其它两幅都要暗(强度低)呢?

这是因为: A2. numpy在做加法运算时,会根据dtype对数据进行“取模”运算。也就是说会产生数据的翻转现象。

而OpenCV在做加法时,会根据数据类型的范围进行限制。比如这里的图像通道数据类型是uint8类型的。那么OpenCV限制通道值最大为255,最小为0.而不会像numpy产生200+100=44的现象。

减法

numpy同加法。OpenCV限制通道值下限为0.

例子

# 导入库 import numpy as np import argparse import cv2  # 构造参数解析器 ap = argparse.ArgumentParser() ap.add_argument("-i", "--image", required=True, help="Path to the image") args = vars(ap.parse_args())  # 加载图像并显示 image = cv2.imread(args["image"]) cv2.imshow("Original", image)  # 构造与原图形状相同,各通道值为100的图像 M = np.ones(image.shape, dtype = "uint8") * 100  # 与原图像相加并显示 added = cv2.add(image, M) cv2.imshow("Added", added)  # 构造与原图形状相同,各通道值为50的图像 M = np.ones(image.shape, dtype = "uint8") * 50  # 在原图基础上减去该图像,并显示 subtracted = cv2.subtract(image, M) cv2.imshow("Subtracted", subtracted) cv2.waitKey(0)

执行脚本

小强学Python+OpenCV之-1.4.3图像(矩阵)加减运算

Added.png

小强学Python+OpenCV之-1.4.3图像(矩阵)加减运算

Subtracted.png

参考

矩阵加减法


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

PCI Express 体系结构导读

PCI Express 体系结构导读

王齐 / 机械工业 / 2010-3 / 55.00元

《PCI Express 体系结构导读》讲述了与PCI及PCI Express总线相关的最为基础的内容,并介绍了一些必要的、与PCI总线相关的处理器体系结构知识,这也是《PCI Express 体系结构导读》的重点所在。深入理解处理器体系结构是理解PCI与PCI Express总线的重要基础。 读者通过对《PCI Express 体系结构导读》的学习,可超越PCI与PCI Express总线......一起来看看 《PCI Express 体系结构导读》 这本书的介绍吧!

JSON 在线解析
JSON 在线解析

在线 JSON 格式化工具

MD5 加密
MD5 加密

MD5 加密工具

SHA 加密
SHA 加密

SHA 加密工具