使用OpenCV执行图像算法(加法和减法)

Posted 程序媛一枚~

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用OpenCV执行图像算法(加法和减法)相关的知识,希望对你有一定的参考价值。

使用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执行图像算法(加法和减法)的主要内容,如果未能解决你的问题,请参考以下文章

OpenCV的滚球背景减法算法

18KW13/6-OpenCV入门-关于图像的算数运算

OpenCV竟然可以这样学!成神之路终将不远

100以内的加法有啥快速的算法?

使用 Opencv 和 Qt 对两个灰度图像进行减法的使用条款

OpenCV(C++)图像运算