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