python - Python中的连续图像遮罩
问题描述
我正在做一个项目来掩盖不同位置的连续图像,以研究单只苍蝇的运动。最终图像应如下所示:正确遮蔽图像。然而,随着代码继续运行,图像开始变成这样:图像遮罩不正确,这不是我想要的,因为我只想要每张图像一个可见区域(包含一只苍蝇的圆圈)而不是三个。我需要对我的代码做些什么,以便每个图像中的不同位置只有一个圆圈,而不是图像中有多个圆圈?
`List = [
[180, 353, 85, str("/media/pi/T3 1TB 2Ch xFer/Ramzy Masked /Arena2")],
[180, 542, 85, str("/media/pi/T3 1TB 2Ch xFer/Ramzy Masked /Arena3")],
[180, 728, 85, str("/media/pi/T3 1TB 2Ch xFer/Ramzy Masked /Arena4")],
]
def load_images_from_folder(folder):
images = []
for filename in os.listdir(folder):
img = cv2.imread(os.path.join(folder,filename))
mask = np.zeros(img.shape[:2], dtype="uint8")
for row in List:
cv2.circle(mask, (row[0], row[1]), row[2], 255, -1)
masked = cv2.bitwise_and(img, img, mask=mask)
cv2.imwrite(os.path.join(row[3], f'{filename}'), masked)
load_images_from_folder("/media/pi/T3 1TB 2Ch xFer/Ramzy Research
Photos/8.17.21")
cv2.waitKey(0)
cv2.destroyAllWindows()
`
解决方案
我对 cv2 库不太熟悉,但我相信这一行:
cv2.circle(mask, (row[0], row[1]), row[2], 255, -1)
在每个循环中在您的面具上添加一个新圆圈。有很多方法可以解决这个问题,但您可以先将此行移动到循环中 cv2.circle 调用的上方,如下所示:
def load_images_from_folder(folder):
images = []
for filename in os.listdir(folder):
img = cv2.imread(os.path.join(folder,filename))
for row in List:
mask = np.zeros(img.shape[:2], dtype="uint8")
cv2.circle(mask, (row[0], row[1]), row[2], 255, -1)
masked = cv2.bitwise_and(img, img, mask=mask)
cv2.imwrite(os.path.join(row[3], f'{filename}'), masked)
这将在每次循环迭代中创建一个全新的掩码。
推荐阅读
- c++ - 函数返回零大小的字符串,即使它的大小不为零
- python - Python 3 中嵌套 For 循环的最大深度是多少?
- python - 图中的python直方图打印bin频率
- java - 无法让我的 Mismatchexception 与 switch 一起正常工作
- android - NestedScrollView(和 ScrollView)不适用于 ConstraintLayout
- html - 在 HTML 上滚动的问题
- javascript - 删除与 ng-repeat 关联的 mongodb 文档会给出“不允许在转发器中重复”
- javascript - Live Server 可以工作,但我收到 localhost 的 404 错误
- sql - 在我的 SQL 查询中,我怎样才能有一个包含从另一个表中查询的值的列?
- python - Dockerizing Scrapy - scrapy 入口点未接收命令参数