【计算机视觉—python 】 图像处理入门教程 —— 图像掩模加法、圆形遮罩和按位运算【 openCV 学习笔记 018 to 020】

1、图像的掩模加法

图像掩模(mask),是用特定的图像或函数对目标图像进行覆盖或遮蔽 ,来控制图像处理的区域或图像处理的过程。图像掩模主要用于提取感兴趣区域(ROI)、提取结构特征、或制作特殊形状的图像。

函数 cv2.add() 用于图像的加法运算,可以使用掩模图像进行遮蔽。对被掩模图像遮蔽的黑色区域不进行处理,保持黑色。

cv2.add(src1, src2 [, dst[, mask[, dtype]]) → dst 

注意:

1.掩模图像mask为8位灰度格式,遮蔽区域位黑色(数值为0),非遮蔽区域为白色(数值为255)。
2.图像src1和src2 形状必须相同。
# 掩膜操作(mask)
import cv2
import numpy as np

img1 = cv2.imread("test1.jpg")  # 读取彩色图像(BGR)
img2 = cv2.imread("test2.jpg")  # 读取彩色图像(BGR)
Mask = np.zeros((img1.shape[0], img1.shape[1]), dtype=np.uint8)  # 创建一个图像 img1 尺寸相同的全零数组(全黑)
xmin, ymin, w, h = 180, 190, 200, 200  # 矩形裁剪区域 (ymin:ymin+h, xmin:xmin+w) 的位置参数
Mask[ymin:ymin + h, xmin:xmin + w] = 255  # 掩模图像,ROI 为白色,其它区域为黑色
print(img1.shape, img2.shape, Mask.shape)

imgAddMask1 = cv2.add(img1, img2, mask=Mask)  # 带有掩模 mask 的加法
imgAddMask2 = cv2.add(img1, np.zeros(np.shape(img1), dtype=np.uint8), mask=Mask)  # 提取 ROI

cv2.imshow("MaskImage", Mask)  # 显示掩模图像 Mask
cv2.imshow("MaskAdd", imgAddMask1)  # 显示掩模加法结果 imgAddMask1
cv2.imshow("MaskROI", imgAddMask2)  # 显示从 img1 提取的 ROI
key = cv2.waitKey(0)  # 等待按键命令

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2、圆形遮罩

用cv2.circle()设计圆形遮罩,cv2.ellipse()设计椭圆形遮罩。

# 圆形和其他形状的遮罩
import cv2
import numpy as np
img1 = cv2.imread("test1.jpg") # 读取彩色图像(BGR)
img2 = cv2.imread("test2.jpg") # 读取彩色图像(BGR)
Mask1 = np.zeros((img1.shape[0],img1.shape[1]),dtype=np.uint8)
Mask2 = Mask1.copy()
# cv2.circle() 参数 1.目标图片 2.圆心位置 3.圆的半径 4.圆的颜色 5.圆形轮廓粗细,负厚度表示绘制实心圆
cv2.circle(Mask1, (285, 285), 110, (255, 255, 255), -1)
# cv2.ellipse() 参数 1.目标图片  2.椭圆圆心  3.长短轴长度  4.偏转角度  5.圆弧起始角度  6.终止角度  7.颜色  8.是否填充
cv2.ellipse(Mask2, (285, 285), (100, 150), 0, 0, 360, 255, -1)
imgAddMask1 = cv2.add(img1, np.zeros(np.shape(img1), dtype=np.uint8), mask=Mask1)  # 提取圆形 ROI
imgAddMask2 = cv2.add(img1, np.zeros(np.shape(img1), dtype=np.uint8), mask=Mask2)  # 提取椭圆
cv2.imshow("circularMask", Mask1)  # 显示掩模图像 Mask
cv2.imshow("circularROI", imgAddMask1)  # 显示掩模加法结果 imgAddMask1
cv2.imshow("ellipseROI", imgAddMask2)  # 显示掩模加法结果 imgAddMask2
key = cv2.waitKey(0)  # 等待按键命令

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3、图像的按位运算

OpenCV 里 cv2. bitwise() 提供了图像的位运算,

cv.bitwise_and(src1, src2[, dst[, mask]] → dst  # 位操作: 与
cv.bitwise_or(src1, src2[, dst[, mask]] → dst  # 位操作: 或
cv.bitwise_xor(src1, src2[, dst[, mask]] → dst  # 位操作: 与或
cv.bitwise_not(src1, src2[, dst[, mask]] → dst  # 位操作: 非(取反)

cv2.bitwise()位运算包含四种方法:与、或、与或、非。计算方式是对图像的像素点值的位运算。流程为先将图像中的每个像素的数值转换为二进制,进行位操作后再将结果转换为十进制。

# 图像按位运算基本操作
import cv2
import matplotlib.pyplot as plt
img1 = cv2.imread("test1.jpg")
img2 = cv2.imread("test2.jpg")
imgAnd = cv2.bitwise_and(img1,img2)  # 与操作
imgOr = cv2.bitwise_or(img1,img2)  # 或操作
imgNot = cv2.bitwise_not(img1)  # 非操作
imgXor = cv2.bitwise_xor(img1,img2)  # 异或操作
# 画图显示
plt.figure(figsize=(9,6))
titleList = ["img1", "img2", "and", "or", "not", "xor"]
imageList = [img1, img2, imgAnd, imgOr, imgNot, imgXor]
for i in range(6):
    plt.subplot(2,3,i+1),plt.title(titleList[i]),plt.axis("off")
    plt.imshow(cv2.cvtColor(imageList[i],cv2.COLOR_BGR2RGB),"gray")
plt.show()

在这里插入图片描述

声明:本文是向博主「youcans_」OpenCV例程300篇学习的自用学习笔记 
原文链接:【youcans@qq.com, youcans的OpenCV例程300篇, https://blog.csdn.net/youcans/category_11459626.html】
  • 6
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在RobotStudio中,可以使用Python API来实现图像识别。以下是一些基本的步骤: 1. 安装Python:在RobotStudio中使用Python API需要安装Python解释器。建议使用Python 3.x版本。 2. 安装Python库:为了进行图像识别,需要安装一些Python库,例如OpenCV和NumPy。可以使用pip命令进行安装。 3. 编写Python脚本:编写Python脚本来实现图像识别功能。可以使用OpenCV库来读取图像文件、进行图像处理和特征提取等操作。 4. 在RobotStudio中调用Python脚本:使用RobotStudio的Python API,在程序中调用Python脚本来实现图像识别功能。可以使用RobotStudio的API来获取摄像头图像、控制机器人的动作等操作。 以下是一个简单的Python脚本示例,用于在机器人工作区中识别并定位一个红色球体: ``` import cv2 import numpy as np # 读取摄像头图像 cap = cv2.VideoCapture(0) while True: # 从摄像头中读取图像 ret, img = cap.read() # 转换为HSV颜色空间 hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV) # 定义红色HSV范围 lower_red = np.array([0,50,50]) upper_red = np.array([10,255,255]) mask1 = cv2.inRange(hsv, lower_red, upper_red) lower_red = np.array([170,50,50]) upper_red = np.array([180,255,255]) mask2 = cv2.inRange(hsv, lower_red, upper_red) # 将两个掩模合并 mask = mask1 + mask2 # 进行形态学变换 kernel = np.ones((5,5),np.uint8) mask = cv2.erode(mask,kernel,iterations = 1) mask = cv2.dilate(mask,kernel,iterations = 1) # 查找轮廓 contours, hierarchy = cv2.findContours(mask, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE) # 在图像中绘制红色轮廓 cv2.drawContours(img, contours, -1, (0,0,255), 3) # 如果找到了红色球体,输出其位置 if len(contours) > 0: x,y,w,h = cv2.boundingRect(contours[0]) print("Ball position: x={}, y={}".format(x+w/2, y+h/2)) # 显示图像 cv2.imshow("Image", img) # 按下q键退出程序 if cv2.waitKey(1) & 0xFF == ord('q'): break # 释放摄像头并关闭所有窗口 cap.release() cv2.destroyAllWindows() ``` 在这个示例中,通过读取摄像头图像,将其转换为HSV颜色空间,并使用掩模找到红色球体的位置。如果找到了红色球体,程序会输出其位置。最后,程序会显示图像并等待用户按下q键退出程序。 在RobotStudio中,可以使用以下代码来调用Python脚本: ``` from abb import Application import sys # 创建RobotStudio应用程序对象 app = Application() # 加载Python脚本 script_file = "path/to/your/script.py" script = app.PythonScript(script_file) # 在程序中调用Python脚本 result = script.Run() # 检查Python脚本是否运行成功 if result == 0: print("Script executed successfully!") else: print("Script failed with error code: {}".format(result)) # 退出应用程序 sys.exit() ``` 这个示例中,首先创建了一个RobotStudio应用程序对象,然后加载Python脚本并在程序中调用它。最后,检查Python脚本是否运行成功,并退出应用程序。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值