使用OpenCV检测图像中的透明形状

时间:2018-10-27 12:48:16

标签: python opencv image-processing object-detection image-recognition

我正在尝试制作图像数据集来训练图像分类NN以实现游戏自动化。

当前,我可以拍摄游戏的屏幕快照,并使用预定义的ROI拍摄我要查找的形状所在的大致区域的照片。在那张照片中,我需要找到长方形(可以是任何颜色)在哪里,其中包含4个箭头,可以裁剪并用作数据集中的图像。

但是,我仍然坚持裁剪矩形,而我想到的方法,通过标准图像处理以及使用Canny Edge Detection和findContours,无法提取形状。

以下是一些原始图片:

所需的输出:

enter image description here

我正在寻找红色长方形的边界框。 使用findContours不能提供Canny边缘检测的结果,因为Canny边缘检测器无法区分背景并将其分类为边缘,并且findContours无法正确识别长方形

filename = "output1.png"
img = cv2.imread(filename, cv2.IMREAD_GRAYSCALE)
blurred = cv2.GaussianBlur(img, (3,3), 3)
canny = cv2.Canny(blurred, threshold1=80, threshold2=100)
im2, contours, hierachy = cv2.findContours(canny, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
area = 0
best = None
best_contour = None
if contours:
    for contour in contours:
        c_area = cv2.contourArea(contour)
        if c_area > area and c_area <= 65000:
            area = c_area
            best = cv2.boundingRect(contour)
            best_contour = contour

if best_contour:
    cv2.rectangle(img, (best[0], best[1]), (best[0]+best[2], best[1]+best[3]), (0,255,0), 5)

在上面的代码中,我决定使用找到的最大轮廓,并将其视为椭圆形,因为如果正确完成,椭圆形无疑是最大轮廓。

如果我继续使用Canny和findContours查找形状,可以进行哪些改进。否则,可以使用其他方法来解决此问题吗?

0 个答案:

没有答案