Opencv检测仅面向方形轮廓

时间:2018-02-12 07:47:50

标签: python opencv image-processing

我有来自相机的视频输入。输入是一个视频,其中我有一个包含6个图像的立方体,每个立方体两侧各有一个图像。我需要检测哪个图像面向相机并且我使用SIFT描述符进行模板匹配,但在开始使用模板匹配器之前,我尝试在图像中找到具有大小约束的方块,因此我只能在这些方块上应用算法。然而我的问题是,在某些角度,相机会看到朝上的图像和一个侧面图像,它会检测到两个模板。我只需要检测正面朝上的方块。这是我的方块检测代码:

def _find_squares(img):
squares = []
img = cv.cvtColor(img, cv.COLOR_BGR2GRAY)
img = cv.GaussianBlur(img, (5, 5), 0)

_retval, bin = cv.threshold(img, 127, 255, cv.THRESH_BINARY)
bin, contours, _heirarchy = cv.findContours(bin, cv.RETR_LIST, cv.CHAIN_APPROX_SIMPLE)
for cnt in contours:
    cnt_len = cv.arcLength(cnt, True)
    cnt = cv.approxPolyDP(cnt, 0.02*cnt_len, True)
    if len(cnt) == 4 and cv.contourArea(cnt) > 1000 and cv.isContourConvex(cnt):
        cnt = cnt.reshape(-1, 2)
        max_cos = np.max([angle_cos(cnt[i], cnt[(i + 1) % 4], cnt[(i + 2) % 4]) for i in xrange(4)])
        if max_cos < 0.1:
            squares.append(cnt)
return squares

这是多维数据集的照片:https://imgur.com/a/g8aMO 我只想检测时钟的方块。目前我的算法检测时钟和桶

0 个答案:

没有答案