Python 3.x 基于图片标签的裁剪图像(Python opencv)

Python 3.x 基于图片标签的裁剪图像(Python opencv),python-3.x,opencv,image-processing,Python 3.x,Opencv,Image Processing,我想编写一个程序,将图像剪切到所示的VIN标签上。 现在我正在调整图像大小,模糊图像,然后使用自适应阈值来减少噪声(幻影等)。结果如下所示(矩形中红色的相关部分): 正如你所看到的,仍然有一些噪音。 之后,一个矩形窗口在图像上滑动,并构建所有像素值的总和。然后我使用矩形的坐标和最小和来裁剪图像。对一些人来说,它是有效的,但由于噪音的原因,它不是100%准确的。有没有办法解决这个问题?(findContour函数返回更糟糕的结果。) 代码: image=cv2.imread(imagepath)

我想编写一个程序,将图像剪切到所示的VIN标签上。 现在我正在调整图像大小,模糊图像,然后使用自适应阈值来减少噪声(幻影等)。结果如下所示(矩形中红色的相关部分):

正如你所看到的,仍然有一些噪音。 之后,一个矩形窗口在图像上滑动,并构建所有像素值的总和。然后我使用矩形的坐标和最小和来裁剪图像。对一些人来说,它是有效的,但由于噪音的原因,它不是100%准确的。有没有办法解决这个问题?(findContour函数返回更糟糕的结果。) 代码:

image=cv2.imread(imagepath)
降噪图像=cv2。FastNL表示有色噪声(图像,无,10,10,7,21)
#调整图像大小、模糊和高斯阈值
resize=imutils.resize(减少噪音的图像,宽度=500)
掩码=np.zero(resize.shape,dtype=np.uint8)
比率=image.shape[0]/浮点(resize.shape[0])
尝试:
灰色=cv2.CVT颜色(调整大小,cv2.COLOR\u BGR2GRAY)
模糊=cv2。双边滤光片(灰色,9,75,75)
除:
模糊=cv2。双边过滤器(调整大小,9,75,75)
通过
阈值=cv2。自适应阈值(模糊,255,cv2。自适应阈值高斯\
cv2.THRESH_二进制,11,2)
#窗口和步长
步长=5
(w_宽度,w_高度)=(int(圆形(阈值形状[1]*0.85,0)),int(圆形(阈值形状[0]*0.55,0)))
如果w_宽度
    image = cv2.imread(imagepath)
    noise_reduced_image = cv2.fastNlMeansDenoisingColored(image, None, 10, 10, 7, 21)
  
    # Resize image, blur, and Gaussian threshold

    resize = imutils.resize(noise_reduced_image, width=500)
    mask = np.zeros(resize.shape, dtype=np.uint8)
    ratio = image.shape[0] / float(resize.shape[0])
    try:
        gray = cv2.cvtColor(resize, cv2.COLOR_BGR2GRAY)
        blur = cv2.bilateralFilter(gray,9,75,75)
    except:
        blur = cv2.bilateralFilter(resize,9,75,75)
        pass
    
   
    thresh = cv2.adaptiveThreshold(blur,255,cv2.ADAPTIVE_THRESH_GAUSSIAN_C,\
            cv2.THRESH_BINARY,11,2)

    #window and step size
    stepSize = 5
    (w_width, w_height) = (int(round(thresh.shape[1]*0.85,0)), int(round(thresh.shape[0]*0.55,0))) 
    if w_width < w_height:
        w_width, w_height = w_height, w_width
    final_window = thresh.sum()
    
    #sliding window
    for x in range(0, thresh.shape[1] - w_width , stepSize):
        for y in range(0, thresh.shape[0] - w_height, stepSize):
            next_window = resize[x:x + w_height, y:y + w_width]
            if next_window.sum() < final_window.sum():
                final_window = next_window