【发布时间】:2022-06-17 11:35:45
【问题描述】:
我正在尝试从 opencv 中的视频文件中删除污染。给定帧中的污染是低于某个阈值的灰度。以下是视频文件中 Frame 的示例。
cap = cv2.VideoCapture(file_name)
object_detector = cv2.createBackgroundSubtractorMOG2()
while True:
ret, frame=cap.read()
mask = object_detector.apply(frame)
_, mask = cv2.threshold(mask,254,255,cv2.THRESH_BINARY)
contours,_ = cv2.findContours(mask, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
for cnt in contours:
area = cv2.contourArea(cnt)
if area>100: #detect for the flashes above 1000pixel
cv2.drawContours(frame, [cnt], -1, (0,255,0),2)
#x, y, w, h= cv2.boundingRect(cnt)
#cv2.rectangle(roi,(x,y),(x+w,y+h),(0,255,0))
key = cv2.waitKey(30)
if key =='27':
break
cv2.imshow("Frame",frame)
cv2.imshow("Mask",mask)
【问题讨论】:
-
您的代码到底有什么问题?什么不起作用?是否有任何错误信息?你得到的图像是什么?白点是好是坏?你在检测什么?您需要更详细地解释。
-
不,我的代码没有任何问题。我在问是否有任何方法可以从我的视频文件中去除污染。代码仅用于说明图像的生成方式。
-
定义污染!白点是特征还是噪声?
-
是的,我想去除某个像素以下的闪光。这些点就是噪音。
-
将您的帧转换为灰度。然后
frame[frame<=threshold]=0,其中 threshold 是您移除闪光灯的阈值。或frame[frame<=threshold]=background,其中背景是您想要的背景颜色的整体灰度。但是,如果这些亮点很糟糕,那么为什么不删除任何高于某个阈值而不是低于某个阈值的亮点呢?
标签: python opencv video-processing cv2