我已经编写了一些代码,以便从图像中裁剪对象(在本例中为数据矩阵代码):
from cassandra.cluster import Cluster
cluster = Cluster(['127.0.0.1'], control_connection_timeout=10, port=9042)
cluster.connect()
代码工作正常,结果我收到了
但是,下一张图像要复杂一些。 我收到与上一张图像相同的结果,但是我不知道如何检测其他两个对象。
有没有一种更简单的方法可以在窗口中显示每个对象?
答案 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)