使用OpenCV执行图像算法(加法和减法)
Posted 程序媛一枚~
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用OpenCV执行图像算法(加法和减法)相关的知识,希望对你有一定的参考价值。
这篇博客将介绍如何使用OpenCV执行图像算术(加法和减法)。可以通过俩种方法实现:
1. 使用OpenCV的cv2.add和cv2.subtract;
2. 使用NumPy的基本加法和减法运算符。
- OpenCV和NumPy 之间有区别;OpenCV执行剪裁,以确保像素值不会超出范围[0,255];
- NumPy将执行模数运算并“环绕”,以确保像素在[0,255];
图像算法用于创建可以调整亮度和对比度的函数、应用alpha混合和透明度、以及创建类似Instagram的过滤器。
1. 效果图
原始图如下:
画面整体调亮后效果图如下,会发现部分地方已经变白色了~
画面整体调暗后效果图如下,会发现很黑~
2. 源码
# USAGE
# python image_arithmetic.py
# 将演示OpenCV和NumPy中加法和减法运算之间的区别/注意事项。
# 以及如何手动调整图像的亮度。
import argparse
import cv2
import imutils
# 导入必要的包
import numpy as np # 进行数值数组处理
# 构建命令行参数及解析
# --image 图像路径,非必须
ap = argparse.ArgumentParser()
ap.add_argument("-i", "--image", type=str, default="djfj.jpg",
help="path to the input image")
args = vars(ap.parse_args())
# 图像表现为Numpy数组(无符号8位整形,unint8,[0,255],
# 当执行cv2的加、减位于0~255之外时,会裁剪以保证在[0,255]之间)
added = cv2.add(np.uint8([200]), np.uint8([100]))
subtracted = cv2.subtract(np.uint8([50]), np.uint8([100]))
print("max of 255: {}".format(added))
print("min of 0: {}".format(subtracted))
# 使用Numpy算数运算符,将执行模运算或者环绕而不是裁剪,以保证结果位于[0,255]
added = np.uint8([200]) + np.uint8([100])
subtracted = np.uint8([50]) - np.uint8([100])
print("wrap around: {}".format(added))
print("wrap around: {}".format(subtracted))
# 加载原始图像并展示
image = cv2.imread(args["image"])
image = imutils.resize(image, width=500)
cv2.imshow("Original", image)
# 通过每个像素加定量100提升亮度
M = np.ones(image.shape, dtype="uint8") * 100
added = cv2.add(image, M)
cv2.imshow("Lighter", added)
# 相同的方法,每个像素减去50以调暗图像
M = np.ones(image.shape, dtype="uint8") * 50
subtracted = cv2.subtract(image, M)
cv2.imshow("Darker", subtracted)
cv2.waitKey(0)
cv2.destroyAllWindows()
参考
以上是关于使用OpenCV执行图像算法(加法和减法)的主要内容,如果未能解决你的问题,请参考以下文章