我想用白色填充角落里的这些三角形。我怎么能用OpenCV检测它们?当然,在这个特定的样本中,我可以只依靠渐变或亮度。然而,在未来,图像不会形成如此完美的形状,所以我在想一些形状检测。
我听说通常可以通过例如霍夫变换来检测形状。但我不知道应该从什么开始。
OpenCV中的轮廓检测没有帮助,因为它找到了太多的候选者。 我尝试使用size = 3的aboutPolyDP,但也没有结果(没有找到这样的对象)。
提前谢谢。
UPD:这些三角形将始终为三角形,但每次都不需要触摸条形。它们总是处于图像的边缘。它们之间的区域大致相同。
UPD2:我希望能够在某个容器中检测三角形并收集与这些三角形对应的点。
答案 0 :(得分:4)
我可以使用以下代码检测三角形。我在图像中找到所有轮廓,然后使用approxPolyDP,我能够找到三角形。
import cv2
import numpy as np
image_obj = cv2.imread('image.jpg')
gray = cv2.cvtColor(image_obj, cv2.COLOR_BGR2GRAY)
kernel = np.ones((4, 4), np.uint8)
dilation = cv2.dilate(gray, kernel, iterations=1)
blur = cv2.GaussianBlur(dilation, (5, 5), 0)
thresh = cv2.adaptiveThreshold(blur, 255, 1, 1, 11, 2)
# Now finding Contours ###################
_, contours, _ = cv2.findContours(
thresh, cv2.RETR_LIST, cv2.CHAIN_APPROX_SIMPLE)
coordinates = []
for cnt in contours:
# [point_x, point_y, width, height] = cv2.boundingRect(cnt)
approx = cv2.approxPolyDP(
cnt, 0.07 * cv2.arcLength(cnt, True), True)
if len(approx) == 3:
coordinates.append([cnt])
cv2.drawContours(image_obj, [cnt], 0, (0, 0, 255), 3)
cv2.imwrite("result.png", image_obj)
您可以在坐标列表中获取轮廓。