从opencv网络摄像头图像中滤除嘈杂的轮廓请参见下图

问题描述

(我很抱歉以前没有问过这个问题,我找不到)。我试图确定与物理对象(在本例中为直角棱镜)和网络摄像头之间的距离。我尝试从大约8英寸的距离进行尝试,在这种距离下相机无法看到周围的环境,但是由于这不是该程序的用例,因此我决定增加距离。 我正在使用此公式确定该距离Z (distance to object) = (X / x) * F,其中X =已知物体的大小,x =该物体的像素的大小,F =这是我计算出的相机校准点。 我以前说过的问题是,我似乎无法找出一种方法来过滤程序似乎找到的所有其他轮廓。看到图片,看看我在说什么。

from imutils import perspective
from imutils import contours
import numpy as np
import imutils

cam = cv2.VideoCapture(0)
running = True

while running:
    rect,img = cam.read()
    flip = cv2.flip(img,1)
    buf1 = cv2.resize(flip,(720,540))
    buf2 = cv2.cvtColor(buf1,cv2.COLOR_BGR2GRAY)
    buf3 = cv2.GaussianBlur(buf2,(5,5),0)
    rect2,buf4 = cv2.threshold(buf3,255,cv2.THRESH_BINARY + cv2.THRESH_OTSU)
    buf5 = cv2.Canny(buf4,50,100)
    buf6 = cv2.findContours(buf5.copy(),cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_SIMPLE)
    cnts = imutils.grab_contours(buf6)
    for c in cnts:
        orig = buf1.copy()
        box = cv2.minAreaRect(c)
        box = cv2.cv.BoxPoints(box) if imutils.is_cv2() else cv2.boxPoints(box)
        box = np.array(box,dtype = "int")
        box = perspective.order_points(box)
        cv2.drawContours(buf1,[box.astype("int")],-1,(0,0),3)
        for (x,y) in box:
            cv2.circle(buf1,(int(x),int(y)),5,255),-1)
        print(box)
        # right = box[3]
        # left = box[2]
        #
        # #print(left)
        # #print(right)
        # length = left[0] - right[0]
        # #print(length)
        # F = float(557.948717948718)
        # Z = ((19.5 * 25.4) / length) * F
        # print(Z)
    cv2.imshow('frame',buf1)
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

cam.release()
cv2.destroyAllWindows()

这是我上面的代码。这是嘈杂图像的图片-> The noisy picture

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)