如何在没有误报的情况下绘制/勾勒图像中形状的边缘?

问题描述

我正在尝试制作一个脚本,我可以在其中绘制图像中每个形状的轮廓,该脚本在某些情况下有效,但当形状的颜色有所下降时会失败。它旨在绘制形状的轮廓(在这种情况下为矩形),但无法绘制整个矩形,并且还在内部添加了一些误报点。有什么方法可以降低脚本或其他工具的敏感性以帮助我实现这一目标?

from __future__ import print_function
import os
import imutils
import cv2
from PIL import Image
import numpy as np


print("OpenCV Version: {}".format(cv2.__version__))
image = cv2.imread("input.png")
gray = cv2.cvtColor(image,cv2.COLOR_BGR2GRAY)
thresh = cv2.threshold(gray,225,255,cv2.THRESH_BINARY_INV)[1]
if imutils.is_cv2() or imutils.is_cv4():
    (cnts,_) = cv2.findContours(thresh.copy(),cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_NONE)
elif imutils.is_cv3():
    (_,cnts,cv2.CHAIN_APPROX_NONE)

cv2.drawContours(image,-1,(50,50,50),24)

RGBimage = cv2.cvtColor(image,cv2.COLOR_BGR2RGB)
PILimage = Image.fromarray(RGBimage)
PILimage.save('output.png',dpi=(300,300))

解决方法

使用以下方法更改阈值:

thresh = cv2.threshold(gray,250,255,cv2.THRESH_BINARY_INV)[1]