gpt4 book ai didi

python - 使用 Opencv 获取轮廓内的平均颜色

转载 作者:太空宇宙 更新时间:2023-11-03 15:36:50 24 4
gpt4 key购买 nike

所以我决定开始一起学习 Open CV 和 Python!

我的第一个项目是在相对静止的背景上检测移动物体,然后检测它们的平均颜色以对它们进行排序。至少有 10 个物体要检测,我正在处理彩色视频。

到目前为止,我设法移除了背景,识别了等高线(可选择获取每个等高线的中心),但现在我正在努力获取每个等高线内部的平均颜色或均值颜色。有一些关于此类问题的主题,但其中大部分是用 C 语言编写的。显然我可以使用 cv.mean() 但我无法获得工作掩码来输入此函数。我想这不是那么困难,但我被困在那里......干杯!

import numpy as np
import cv2

video_path = 'test.h264'

cap = cv2.VideoCapture(video_path)
fgbg = cv2.createBackgroundSubtractorMOG2()


while (cap.isOpened):

ret, frame = cap.read()
if ret==True:
fgmask = fgbg.apply(frame)
(contours, hierarchy) = cv2.findContours(fgmask, cv2.RETR_TREE,cv2.CHAIN_APPROX_NONE)

for c in contours:
if cv2.contourArea(c) > 2000:
cv2.drawContours(frame, c, -1, (255,0,0), 3)
cv2.imshow('foreground and background',fgmask)
cv2.imshow('rgb',frame)

key = cv2.waitKey(1) & 0xFF

if key == ord("q"):
break

cap.release()
cv2.destroyAllWindows()

最佳答案

您可以通过首先创建一个与输入图像具有相同尺寸并将像素值设置为零的新图像来创建蒙版。

然后您将轮廓绘制到像素值为 255 的图像上。生成的图像可以用作 mask 。

mask = np.zeros(frame.shape, np.uint8)
cv2.drawContours(mask, c, -1, 255, -1)

mask 然后可以用作 cv.mean 的参数,例如

mean = cv.mean(frame, mask=mask)

请注意,RGB 颜色的平均值并不总是有意义。也许尝试转换为 HSV 颜色空间并仅使用 H channel 来检测对象的颜色。

关于python - 使用 Opencv 获取轮廓内的平均颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54316588/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com