目录

  • 1. opencv读取的图像数据
  • 2. 图像加法

1. opencv读取的图像数据

在opencv中,cv2.imread()读取的图像为numpy.ndarry数组,数据类型为np.uint8(0-255)。

img = cv.imread(r'E:\0_postgraduate\test.jpg', flags=1)
print('img的数据类型是:%s'%type(img))
print('img的数据范围是:{}'.format(img.dtype))
print('img的形状为:{}'.format(img.shape))# 结果
img的数据类型是:<class 'numpy.ndarray'>
img的数据范围是:uint8
img的形状为:(440, 640, 3)

2. 图像加法

我们已经知道了读入的图像本质上是numpy.ndarry数组,那么如果将两个同样维度的数组相加会怎样?

对于相加,我们有两种方式:假设a和b都为numpy.ndarry数组,
(1)使用numpy数组直接相加:a + b
(2)使用cv.add(a, b)

这两种方法的不同之处在于:

a + b:250+10 = 260 => 255
cv.add(a, b):250+10 = 260 % 256 = 4

具体来说,OpenCV加法是一个饱和操作,而Numpy加法是一个模数操作

举个例子:

np.random.seed(100)
a = np.random.randint(250,255,(10,10), dtype=np.uint8)
print('a数组:\n{}'.format(a))
b = np.ones((10,10),dtype=np.uint8) * 5
print('b数组:\n{}'.format(b))
print('a+b的结果为:\n{}'.format(a+b))
print('cv.add(a,b)的结果为:\n{}'.format(cv.add(a,b)))
# 结果
a数组:
[[250 254 253 250 253 250 253 253 253 253][251 254 250 251 250 253 250 252 252 251][251 254 250 252 250 254 252 253 252 251][253 253 252 253 253 251 253 252 250 252][251 250 251 251 253 250 254 254 254 253][252 254 252 252 250 253 251 253 252 251][253 254 251 250 250 252 251 253 253 252][254 253 254 252 251 254 250 251 253 254][254 254 250 254 252 254 250 253 254 254][252 251 254 254 253 251 253 252 254 253]]
b数组:
[[5 5 5 5 5 5 5 5 5 5][5 5 5 5 5 5 5 5 5 5][5 5 5 5 5 5 5 5 5 5][5 5 5 5 5 5 5 5 5 5][5 5 5 5 5 5 5 5 5 5][5 5 5 5 5 5 5 5 5 5][5 5 5 5 5 5 5 5 5 5][5 5 5 5 5 5 5 5 5 5][5 5 5 5 5 5 5 5 5 5][5 5 5 5 5 5 5 5 5 5]]
a+b的结果为:
[[255   3   2 255   2 255   2   2   2   2][  0   3 255   0 255   2 255   1   1   0][  0   3 255   1 255   3   1   2   1   0][  2   2   1   2   2   0   2   1 255   1][  0 255   0   0   2 255   3   3   3   2][  1   3   1   1 255   2   0   2   1   0][  2   3   0 255 255   1   0   2   2   1][  3   2   3   1   0   3 255   0   2   3][  3   3 255   3   1   3 255   2   3   3][  1   0   3   3   2   0   2   1   3   2]]
cv.add(a,b)的结果为:
[[255 255 255 255 255 255 255 255 255 255][255 255 255 255 255 255 255 255 255 255][255 255 255 255 255 255 255 255 255 255][255 255 255 255 255 255 255 255 255 255][255 255 255 255 255 255 255 255 255 255][255 255 255 255 255 255 255 255 255 255][255 255 255 255 255 255 255 255 255 255][255 255 255 255 255 255 255 255 255 255][255 255 255 255 255 255 255 255 255 255][255 255 255 255 255 255 255 255 255 255]]

这么说可能还不明显,用一张图片来看看:

mask = np.ones(img.shape, dtype=np.uint8) * 50
newImg1 = cv.add(img, mask)  # cv.add(a, b)
newImg2 = img + mask  # a + b
cv.imshow('original image', img)
cv.imshow('cv.add(a,b)', newImg1)
cv.imshow('numpy: a + b', newImg2)
k = cv.waitKey(0)
if k & 0xFF == ord('q'):cv.destroyAllWindows()


可以看出cv.add()更适合用来处理图像

【opencv】图像加法相关推荐

  1. OpenCV 图像的加法

    可以使用OpenCV的cv.add()函数把两幅图像相加,或者可以通过numpy操作添加两个图像.必须保证两张图片的有相同的大小和类型,可以通过shape去查看两张图片是否相同 注:OpenCV加法和 ...

  2. opencv学习笔记7:图像加法与图像融合

    图像加法 1.使用Numpy加法 运算方式:结果=图像1+图像2 原理:图像数据格式为unit8 8位二进制表示范围是0到255. 二进制相加 1.不超过255的,如100+58=158 2.两数相加 ...

  3. 【OpenCV 例程200篇】16. 不同尺寸的图像加法

    [OpenCV 例程200篇]16. 不同尺寸的图像加法 欢迎关注 『OpenCV 例程200篇』 系列,持续更新中 欢迎关注 『Python小白的OpenCV学习课』 系列,持续更新中 函数 cv2 ...

  4. [转载] opencv学习笔记7:图像加法与图像融合

    参考链接: python opencv 基础 4: addWeighted() 融合两张图像 图像加法 1.使用Numpy加法 运算方式:结果=图像1+图像2 原理:图像数据格式为unit8 8位二进 ...

  5. OpenCV图像剪切,超出图像区域指定颜色填充

    OpenCV图像剪切,超出图像区域指定颜色填充 [尊重原创,转载请注明出处]http://blog.csdn.net/guyuealian/article/details/77486096 在Open ...

  6. opencv图像的基础操作

    目标 • 获取像素值并修改 • 获取图像的属性(信息) • 图像的ROI() • 图像通道的拆分及合并 几乎所有这些操作与Numpy 的关系都比与OpenCV 的关系更加紧密,因此熟练Numpy 可以 ...

  7. python opencv 图像切割_【OpenCV+Python】图像的基本操作与算术运算

    图像的基本操作 在上个教程中,我们介绍了使用鼠标画笔的功能.本次教程,我们将要谈及OpenCV图像处理的基本操作. 本次教程的所有操作基本上都和Numpy相关,而不是与OpenCV相关.要使用Open ...

  8. python opencv图像叠加/图像融合/mask掩模

    目录 1.图像叠加 2.图像融合 3.图像mask掩模(包括按位AND,OR,NOT和XOR运算) 1.图像叠加 可以通过OpenCV函数cv.add()或简单地通过numpy操作添加两个图像,res ...

  9. 十五天掌握OpenCV——图像上的算术运算

    魏老师学生--Cecil:学习OpenCV-机器视觉之旅 图像加法 代码演示 图像混合 代码演示 按位运算 代码演示 Aim:掌握图像的:加法.减法.位运算.cv2.add().cv2.addWeig ...

最新文章

  1. java网络编程的通信原理_11 - 网络编程之设备间通信原理
  2. tensorflow tf.train.ExponentialMovingAverage() (滑动平均模型)(移动平均法 Moving average,MA)(用于平滑数据波动对预测结果的影响)
  3. Linux C:管道的实现原理,命名管道
  4. 【Java并发编程】之八:多线程环境中安全使用集合API
  5. Redis:11---Set对象
  6. 计算机操作系统指导书,《计算机操作系统》实验指导书-2015
  7. python网络爬虫学习笔记(八):XPath的使用
  8. C++总结:static_cast ,reinterpret_cast
  9. 主线剧情02-ARM-Linux基础学习记录
  10. ESXI安装网卡或HBA卡驱动
  11. Eigen库计算两个向量夹角
  12. 中级java面试问题大全及答案大全
  13. . java.lang.IllegalArgumentException: requirement failed: Can only call getServletHandlers on a runn
  14. screenX、clientX、pageX, offsetX的区别
  15. transform:scale实现大屏自适应
  16. 无光驱安装redhat企业版
  17. poj1008 -- 玛雅历
  18. Java是什么软件-详细解答Java到底是什么
  19. python写抽奖转盘_python实现转盘效果 python实现轮盘抽奖游戏
  20. flickr的浏览器

热门文章

  1. 启动微服务时端口被占用问题
  2. android 数据流量统计
  3. DirectX12(D3D12)基础教程(十)——DXR(DirectX Raytracing)基础教程(下)
  4. java二维数奇数组金字塔_金字塔神奇数学几何 竟存在世外高人!
  5. 使用locust压力测试
  6. 毕业设计(论文)撰写内容与格式要求
  7. UI非常漂亮的数诚1对1直播/带收徒/带公会/运营版本
  8. 标签页 插件 html,chrome新标签页插件(微度新标签页)
  9. HTML文本标记(一)
  10. vue3新开窗口并传参