opencv算术运算

1.图像加法
使用函数 cv2.add() 将两幅图像进行加法运算,也可以直接使用numpy,res=img1+img。

import cv2 as cv
import numpy as np
import matplotlib.pyplot as plt

#x = np.uint8([250])
#y = np.uint8([10])
#print(cv.add(x, y))# 250+10 = 260 => 255
#print(x+y) # 250+10 = 260 % 256 = 4

#opencv 的加法 和 numpy的加法不一样
img =cv.imread(‘D:/lane.JPG’)
img1 = img + img
imageRGB = cv.cvtColor(img1, cv.COLOR_BGR2RGB)# bgr 转 rgb
plt.imshow(imageRGB)
plt.show()
img =cv.imread(‘D:/lane.JPG’)
img1 = cv.add(img,img)
cv.namedWindow(‘image’,cv.WINDOW_AUTOSIZE) #创建窗口显示,窗口名
cv.imshow(‘image’, img1) #显示图像
cv.waitKey(0) #0表示等待键盘输入,按任意键继续巡行程序
cv.destroyAllWindows() #关闭窗口
2. 图像混合
图像渐变 g (x) = (1−α)f0 (x) + αf1 (x)
通过修改 α 的值(0 → 1),可以实现图像混合
import cv2 as cv
import numpy as np
img1=cv.imread(‘D:/xi.JPG’)
img2=cv.imread(‘D:/yu.JPG’)
dst=cv.addWeighted(img1,0.3,img2,0.7,0)
cv.imshow(‘dst’,dst)
cv.waitKey(0)
cv.destroyAllWindows()

注意:两幅图像的大小,类型必须一致。

### OpenCV中的点运算概述 在计算机视觉领域,点运算是指基于单个像素值的变换操作。这些操作通常用于调整图像亮度、对比度或其他属性。OpenCV 提供了一系列工具来执行此类操作。 #### 基本概念 点运算的核心在于逐像素处理图像数据。常见的点运算包括线性变换(如缩放和偏移)、非线性变换(如伽马校正),以及逻辑位运算(如 AND、OR、XOR 和 NOT)。通过这些基本操作,可以实现多种效果,例如增强图像细节或提取特定区域的信息[^1]。 --- ### 使用OpenCV实现点运算的方法 以下是几种常用的点运算及其具体实现方式: #### 1. **加减乘除算术运算** OpenCV 支持对两幅图像进行逐像素的算术运算。这种技术可用于叠加多张图片或者创建混合效果。 ```python import cv2 import numpy as np img1 = cv2.imread('image1.jpg') img2 = cv2.imread('image2.jpg') # 加法运算 result_add = cv2.add(img1, img2) # 减法运算 result_subtract = cv2.subtract(img1, img2) # 显示结果 cv2.imshow('Addition', result_add) cv2.imshow('Subtraction', result_subtract) cv2.waitKey(0) cv2.destroyAllWindows() ``` 上述代码展示了如何加载两张图片对其进行加法与减法运算[^2]。 --- #### 2. **按位逻辑运算** 除了简单的数值计算外,还可以利用布尔代数原理完成更复杂的任务。比如 `bitwise_and` 可用来裁剪感兴趣的部分;而 `bitwise_not` 则反转颜色通道分布情况。 示例程序如下所示: ```python # OR 运算 (已提供于引用材料中) dest_or = cv2.bitwise_or(img1, img2, mask=None) cv2.imshow('Bitwise OR', dest_or) # NOT 运算 not_img1 = cv2.bitwise_not(img1) cv2.imshow('Inverted Image', not_img1) cv2.waitKey(0) cv2.destroyAllWindows() ``` 这里实现了两个重要功能——“或”组合模式展示以及全图反相显示。 --- #### 3. **形态学操作作为特殊形式的点运算** 虽然严格意义上讲,腐蚀(`erode`)膨胀(`dilate`)属于邻域类别的范畴,但由于它们仅依赖当前中心位置的状态变化决定最终输出状态,因此也可以视作广义上的点级修改手段之一。 下面给出一段关于开闭运算的具体例子说明: ```python kernel = np.ones((5, 5), dtype=np.uint8) opening_result = cv2.morphologyEx(image, cv2.MORPH_OPEN, kernel) # 开运算 closing_result = cv2.morphologyEx(image, cv2.MORPH_CLOSE, kernel) # 闭运算 cv2.imshow('Opening Result', opening_result) cv2.imshow('Closing Result', closing_result) cv2.waitKey(0) cv2.destroyAllWindows() ``` 此脚本片段定义了一个大小固定的结构化元素,分别调用了两次不同的预设函数接口达成目标需求[^4]。 --- ### 总结 综上所述,在实际应用过程中可以根据项目背景灵活选用合适的算法模块达到预期目的。无论是基础层面还是高级定制方案都能找到相应支持库帮助解决问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值