我在绘制实时视频截图时遇到问题。我正在Python上使用OpenCV库
我的目的是测量一条一条穿过一条管子的罗非鱼,并通过获得矩形尺寸得到它们的大致尺寸。Here是1个罗非鱼通过的样本。在
Here是另一个带背光的
问题是水也被检测成一个轮廓,我似乎无法将鱼隔离。我尝试过使用模糊技术、扩张技术、腐蚀技术,但似乎不能解决我的问题。在
还有其他算法可以用吗?还是应该切换到目标检测?
我的代码是:
#!/usr/bin/env python3
import numpy as np
import cv2
import time
kernel = np.ones((5,5),np.uint8)
cap = cv2.VideoCapture('white.mp4')
foreground_background = cv2.createBackgroundSubtractorMOG2()
while True:
ret, frame = cap.read()
if(type(frame) == type(None)):
break
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
#gray = cv2.GaussianBlur(gray, (21, 21), 0)
#gray = cv2.medianBlur(gray,11)
gray = cv2.bilateralFilter(gray,9,75,75)
ret,thresh = cv2.threshold(gray, 127, 255 , cv2.THRESH_BINARY_INV)
thresh = cv2.erode(thresh, kernel, iterations=3)
thresh = cv2.dilate(thresh, kernel, iterations=3)
im2, cnts, hierarchy = cv2.findContours(thresh, cv2.RETR_EXTERNAL,
cv2.CHAIN_APPROX_SIMPLE)
c=None
for c in cnts:
(x, y, w, h) = cv2.boundingRect(c)
cv2.rectangle(frame, (x, y), (x + w, y + h), (255, 255, 0), 2)
cv2.imshow('Output', thresh)
cv2.waitKey(2)
cap.release()
cv2.destroyAllWindows()
以下由马克·塞切尔补充。。。如果有人想看到单独的帧,我以10 fps的速度提取帧,并将帧蒙太奇,如下所示:
使用的命令:
^{pr2}$
我会尝试几种方法,包括:
请注意,列和向量上的初始高值是照明条件的结果,可以通过背景移除进行修正(参见步骤1)。在
在python中的numpy包中,您可以使用以下内容执行列求和:
^{1}$其中M是当前图像/矩阵/感兴趣的帧。在
相关问题 更多 >
编程相关推荐