【发布时间】:2021-06-04 06:58:43
【问题描述】:
我正在尝试构建一个只将“好”帧发送到数据库的素材过滤器。
这是我目前的评分功能:
def rateImg(img):
try:
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
except:
gray = img
edges = cv2.Canny(gray, 0, 255)
countours, _ = cv2.findContours(
edges, cv2.RETR_LIST, cv2.CHAIN_APPROX_NONE)
num_of_countours = len(countours)
lap = cv2.Laplacian(gray, cv2.CV_64F).var()
lap = round(lap, 2)
return [lap, num_of_countours]
首先,我使用拉普拉斯方差来计算来自特定时间窗口的图像的清晰度。
从技术上讲,它应该为我提供一个“好的”框架,但情况并非总是如此。
我必须使用的相机不是很好,有时会像this 一样出现故障,并且像这样的帧具有最高的拉普拉斯方差。
因此,我目前的解决方案是计算图像中的计数数量,如果图像超过特定阈值,我将其归类为“故障”。但是使用这种方法,算法将包含大量对象的图像评为“故障”。
另外,我也尝试过detecting squares and rectangles,但事实证明,这种方法的效果远不如 countour 方法。
有什么方法可以检测图像中的明显故障吗? 我觉得应该有,因为作为一个人类,我一眼就能轻松地对故障图像和正常图像进行分类。我似乎无法指出究竟是什么让它们与众不同。
【问题讨论】:
-
当您查看图像时,您不会检测到“故障”,您会识别场景和其中的对象,并注意到您无法识别的东西就像你知道的一样。为了让我们回答您的问题,您必须向我们展示更多这些“故障”的示例,以便我们确定它们的共同点。通过一个示例,您将获得如何识别一个示例的想法,而这些想法可能不适用于其他示例。
标签: python python-3.x opencv image-processing cv2