OpenCV 05(图像的算术与位运算)

这篇具有很好参考价值的文章主要介绍了OpenCV 05(图像的算术与位运算)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、图像的算术运算

1.1 图像的加法运算

- add  opencv使用add来执行图像的加法运算

图片就是矩阵, 图片的加法运算就是矩阵的加法运算, 这就要求加法运算的两张图shape必须是相同的.

import cv2
import numpy as np

cat = cv2.imread('D:\\3-project\\zyj\\pythonCNN\\pic\\cat.jpeg')
dog = cv2.imread('D:\\3-project\\zyj\\pythonCNN\\pic\\dog.jpeg')

print(cat.shape)
print(dog.shape)
cat1=cat[:360, :499]
print(cat1.shape)

new_img= cv2.add(cat1, dog)

cv2.imshow('new',new_img)
cv2.waitKey(0)

另外一种写法: 

# 图片加法
import cv2

cat = cv2.imread('./cat.jpeg')
dog = cv2.imread('./dog.jpeg')

# 加法要求两个图片大小一致
print(cat.shape)
print(dog.shape)
# 把猫的图片变小
# 注意坑. opencv中resize中传递新的宽度和高度, 先宽度再高度, 所有是先列后行, 和shape的输出反了.
new_cat = cv2.resize(cat, (dog.shape[:-1][::-1]))
# 和单个数字运算, 超过255 会被截断, 相当于 % 256
print(new_cat[0:5, 0:5])
print(new_cat[0:5, 0:5] + 100) 
cv2.imshow('cat_dog', np.hstack((new_cat, dog)))
# 加法, 加法的效果是加起来如果超过255, 统一变成255
new_img = cv2.add(new_cat, dog)
print(new_img[0:5, 0:5])
cv2.imshow('cat_dog', np.hstack((new_cat, dog, new_img)))


cv2.waitKey(0)
cv2.destroyAllWindows()

 opencv中resize中传递新的宽度和高度, 先宽度再高度, 所有是先列后行, 和shape的输出反了

`dog.shape[:-1]` 它用于获取图像的高度和宽度,但排除了通道数(如果图像是多通道的话)。

假设 `dog` 是一个图像,那么 `dog.shape` 将返回一个包含三个值的元组,通常形式为 `(height, width, channels)`,

通过使用切片 `[:-1]`,我们从形状元组中排除了最后一个元素(通道数),因此得到一个包含高度和宽度的子元组,即 `(height, width)`。

 

`dog.shape[::-1]` 是一个 Python 表达式,用于反转图像 `dog` 的形状信息。让我解释这个表达式的含义:

1. `dog.shape`:这部分获取图像 `dog` 的形状信息。`shape` 是一个属性,用于获取图像的维度信息。通常,它返回一个元组,其中包含三个值,分别表示高度、宽度和通道数。例如,对于彩色图像,形状可能是 `(height, width, channels)`。

2. `[::-1]`:这是 Python 的切片(slicing)操作,它将元组中的元素反转顺序。在这里,它用于交换元组中的元素位置,将 `(height, width, channels)` 变成了 `(channels, width, height)`。

综合起来,`dog.shape[::-1]` 返回一个反转后的形状元组,通常用于将图像的形状信息调整为某些库或函数的期望输入格式。这种操作在图像处理和计算机视觉任务中可能会有用,特别是当需要将通道数移动到元组的第一个位置时。

 

# 缩小图像到新尺寸 (width, height)

new_size = (300, 200)

resized_image = cv2.resize(image, new_size)

# 放大图像到新尺寸 (width, height)

new_size = (600, 400)

resized_image = cv2.resize(image, new_size) 

OpenCV 05(图像的算术与位运算),opencv,人工智能,计算机视觉

1.2 图像的减法运算

- subtract 

- opencv使用subtract来执行图像的减法运算, 图像对应位置的元素相减, 如果减完小于0, 统一变成0. 

import cv2
  
  cat = cv2.imread('./cat.jpeg')
  dog = cv2.imread('./dog.jpeg')
  
  # 加法要求两个图片大小一致
  print(cat.shape)
  print(dog.shape)
  # 把猫的图片变小
  # 注意坑. opencv中resize中传递新的宽度和高度, 先宽度再高度, 所有是先列后行, 和shape的输出反了.
  new_cat = cv2.resize(cat, (dog.shape[:-1][::-1]))
  
  # 减法
  new_img = cv2.subtract(new_cat, dog)
  print(new_cat[0:5, 0:5], dog[0:5, 0:5])
  print(new_img[0:5, 0:5])
  cv2.imshow('cat_dog', np.hstack((new_cat, dog, new_img)))
  
  
  cv2.waitKey(0)
  cv2.destroyAllWindows()

OpenCV 05(图像的算术与位运算),opencv,人工智能,计算机视觉

同样的还有乘法, 除法运算. cv2.mutiply, cv2.divide

1.3 图像的融合

- cv2.addWeighted(src1, alpha, src2, beta, gamma)

- 图片的融合操作相当于对图片进行线性运算  w1* x1 + w2 * x2 + b. 其中alpha是第一个权重参数, beta是第二个权重参数, gamma是偏差.

  import cv2
  
  cat = cv2.imread('./cat.jpeg')
  dog = cv2.imread('./dog.jpeg')
  
  new_cat = cv2.resize(cat, (dog.shape[:-1][::-1]))
  # 相当于res = new_cat * 0.4 + dog * 0.6 + 0
  res = cv2.addWeighted(new_cat, 0.4, dog, 0.6, 0)
  
  cv2.imshow('cat_dog', np.hstack((new_cat, dog, res)))
  
  
  cv2.waitKey(0)
  cv2.destroyAllWindows()

OpenCV 05(图像的算术与位运算),opencv,人工智能,计算机视觉

二、OpenCV的位运算

bitwise_not(img)  非操作的效果就相当于是用 255 -  img

  import cv2
  import numpy as np
  
  cat = cv2.imread('./cat.jpeg')
  dog = cv2.imread('./dog.jpeg')
  
  cat_not = cv2.bitwise_not(cat)
  cat_not_not = cv2.bitwise_not(cat_not)
  cv2.imshow('not', np.hstack((cat, cat_not, cat_not_not)))
  print(cat[:3, :3])
  print(cat_not[:3, :3])
  print(cat_not_not[:3, :3]
        
  cv2.waitKey(0)
  cv2.destroyAllWindows()

OpenCV 05(图像的算术与位运算),opencv,人工智能,计算机视觉

- bitwise_and(img1, img2) 与运算, 图片对应位置元素进行与操作. 表现出来的效果就是黑和黑与还是黑, 白和白与还是白.

  import cv2
  import numpy as np
  
  cat = cv2.imread('./cat.jpeg')
  dog = cv2.imread('./dog.jpeg')
  
  new_cat = cv2.resize(cat, (dog.shape[:-1][::-1]))
  cat_and_dog = cv2.bitwise_and(new_cat, dog)
  cv2.imshow('not', np.hstack((new_cat, cat_and_dog)))
  print('cat:', new_cat[:3, :3])
  print('-----------')
  print('dog:', dog[:3, :3])
  print('-----------')
  print(cat_and_dog[:3, :3])
  
  cv2.waitKey(0)
  cv2.destroyAllWindows()

OpenCV 05(图像的算术与位运算),opencv,人工智能,计算机视觉

- bitwise_or  或运算 对应元素做或运算

- bitwise_xor 异或运算 对应元素做异或运算文章来源地址https://www.toymoban.com/news/detail-702446.html

  import cv2
  import numpy as np
  
  #创建一张图片
  img = np.zeros((200,200), np.uint8)
  img2 = np.zeros((200,200), np.uint8)
  
  img[20:120, 20:120] = 255
  img2[80:180, 80:180] = 255
  
  #new_img = cv2.bitwise_bit(img)
  #new_img = cv2.bitwise_and(img, img2)
  #new_img = cv2.bitwise_or(img, img2)
  new_img = cv2.bitwise_xor(img, img2)
  
  
  cv2.imshow('new_img', new_img)
  cv2.imshow('img', img)
  cv2.imshow('img2', img2)
  cv2.waitKey(0)

到了这里,关于OpenCV 05(图像的算术与位运算)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • OpenCv 图像的算数运算

    1. 图像加法 函数 cv.add(img1, img2) 参数中的img1 和 img2 应该是相同的深度和类型, 或者第二个图像可以是像素值 代码示例: 可以注意到,如果二者的和大于最大像素值255那么opencv会将其自动置为255. 合成实例: 可以发现 add 函数就是普通的像素值相加 2.图像混合 cv.addWeighted(img

    2024年02月03日
    浏览(34)
  • OpenCV——图像按位运算

    OpenCV——图像按位运算由CSDN点云侠原创,爬虫自重。如果你不是在点云侠的博客中看到该文章,那么此处便是不要脸的爬虫。   OpenCV4 针对两个图像之间的“与”、“或”、“异或”、以及“非”运算分别提供了 bitwise_and() 、 bitwise_or() 、 bitwise_xor() 、 bitwise_not() 函数。图

    2024年02月01日
    浏览(39)
  • opencv -11 图像运算之按位逻辑运算(图像融合&图像修复和去除)

    按位逻辑运算是一种对图像进行像素级别的逻辑操作的方法,使用OpenCV的按位逻辑运算函数可以对图像进行位与(AND)、位或(OR)、位非(NOT)和位异或(XOR)等操作。 通俗点就是将像素点的十进制值转成二进制 来运算 以下是一些常见的按位逻辑运算的应用场景: 图像融

    2024年02月17日
    浏览(43)
  • 【OpenCV入门】第五部分——图像运算

    当计算机处理图像时,有些内容需要处理,有些内容不需要处理。能够覆盖原始图像,仅暴露原始图像“感兴趣区域”(ROI)的模板图像就叫做 掩模 。 掩模 (mask),也叫做掩码,在程序中用二值图像来表示:0值(纯黑)区域表示被遮盖的部分,255值(纯白)区域表示暴露

    2024年02月10日
    浏览(35)
  • 【OpenCv • c++】图像识别边缘检测 图像差分运算

    🚀 个人简介:CSDN「 博客新星 」TOP 10 , C/C++ 领域新星创作者 💟 作    者: 锡兰_CC ❣️ 📝 专    栏: 【OpenCV • c++】计算机视觉 🌈 若有帮助,还请 关注➕点赞➕收藏 ,不行的话我再努努力💪💪💪 边缘检测是图像处理与计算机视觉中最重要的技术之一,其目的是检

    2024年02月03日
    浏览(35)
  • opencv 案例05-基于二值图像分析(简单缺陷检测)

    缺陷检测,分为两个部分,一个部分是提取指定的轮廓,第二个部分通过对比实现划痕检测与缺角检测。本次主要搞定第一部分,学会观察图像与提取图像ROI对象轮廓外接矩形与轮廓。 下面是基于二值图像分析的大致流程 读取图像 将图像转换为灰度图,并对其进行二值化处

    2024年02月10日
    浏览(43)
  • 人工智能-OpenCV+Python实现人脸识别(人脸检测)

    在OpenCV中使用Haar特征检测人脸,那么需要使用OpenCV提供的xml文件(级联表)在haarcascades目录下。这张级联表有一个训练好的AdaBoost训练集。首先要采用样本的Haar特征训练分类器,从而得到一个级联的AdaBoost分类器。Haar特征值反映了图像的灰度变化情况。例如:脸部的一些特征

    2024年02月06日
    浏览(99)
  • C++结合OpenCV:图像的加法运算

    一、图像运算 针对图像的加法运算、位运算都是比较基础的运算。但是,很多复杂的图像处理功能正是借助这些基础的运算来完成的。所以,牢固掌握基础操作,对于更好地实现图像处理是非常有帮助的。本章简单介绍了加法运算、位运算,并使用它们实现了位平面分解、图

    2024年01月18日
    浏览(45)
  • 【图像处理OpenCV(C++版)】——2.2 OpenCV之矩阵运算详解(全)

    前言 : 😊😊😊 欢迎来到本博客 😊😊😊 🌟🌟🌟 本专栏主要结合OpenCV和C++来实现一些基本的图像处理算法并详细解释各参数含义,适用于平时学习、工作快速查询等,随时更新。 😊😊😊 具体食用方式:可以点击本专栏【OpenCV快速查找(更新中)】–搜索你要查询的算子

    2024年02月03日
    浏览(68)
  • Opencv+Python笔记(三)图像的基本运算

    1.图像的加法运算 两种加法 使用OpenCv的cv.add()函数将两幅图像简单相加(饱和操作 若结果大于255 则取255) Opencv API: 输入:src1 src2:需要相加的两张图片;dst:相加后的输出图像(可省略);mask:掩码矩阵(可省略),mask 是一个8位的单通道图像,它指定了目标图像哪些元素会被

    2023年04月22日
    浏览(30)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包