Python:在其自己的窗口中显示图像的每个对象

时间:2018-08-06 09:40:14

标签: python opencv bounding-box

我已经编写了一些代码,以便从图像中裁剪对象(在本例中为数据矩阵代码):

from cassandra.cluster import Cluster
cluster = Cluster(['127.0.0.1'], control_connection_timeout=10,  port=9042)
cluster.connect()

First Image Data Matrix

代码工作正常,结果我收到了

Result Of My Python Code

但是,下一张图像要复杂一些。 我收到与上一张图像相同的结果,但是我不知道如何检测其他两个对象。

Second Image With Three Objects

有没有一种更简单的方法可以在窗口中显示每个对象?

2 个答案:

答案 0 :(得分:1)

对于此特定图像,请使用最大的轮廓线并检查对象是否为4边形。如果边界框角之间的半点(参见下面的对)在轮廓线阵列中,则说明问题已解决。 / p>

对:TopRight-TopLeft,TopRight-BottomRight,TopLeft-BottomLeft,BottomLeft-BottomRight

或者您可以检查边界框内是否存在非黑白像素?

对于绘图的个人性,只需为您已经拥有的东西拍一拍

答案 1 :(得分:1)

这个怎么样?

import numpy as np
import cv2

image = cv2.imread("datamatrixc.png")
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

ret, bin_img = cv2.threshold(gray, 0, 255, cv2.THRESH_BINARY_INV + cv2.THRESH_OTSU)

kernel = np.ones((3,3),np.uint8)
closing = cv2.morphologyEx(bin_img, cv2.MORPH_CLOSE, kernel, iterations=4)

n_labels, labels, stats, centroids = cv2.connectedComponentsWithStats(bin_img)

size_thresh = 5000

for i in range(1, n_labels):
    if stats[i, cv2.CC_STAT_AREA] >= size_thresh:
        print(stats[i, cv2.CC_STAT_AREA])
        x = stats[i, cv2.CC_STAT_LEFT]
        y = stats[i, cv2.CC_STAT_TOP]
        w = stats[i, cv2.CC_STAT_WIDTH]
        h = stats[i, cv2.CC_STAT_HEIGHT]

        cv2.imshow('img', image[y:y+h, x:x+w])
        cv2.waitKey(0)