我想删除牌照周围的黑色边框。我正在使用opencv + android。
请回复使用我可以删除边框的代码。
我还附上了图片。image 1
答案 0 :(得分:0)
您可以执行(DoG)高斯差异以检测图像中的高频细节。图像中的高频率表示不同的边缘和角落。
以下是所请求的代码。这些解释作为旁边的评论:
import cv2
img = cv2.imread('number_plate.jpg') #---Reading the image---
img1 = img.copy() #----The final contour will be drawn on the copy of the original image---
gray_img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) #---converting to gray scale---
在执行DoG之前,我通过应用自适应直方图均衡来增强灰色销售图像:
clahe = cv2.createCLAHE(clipLimit=3.0, tileGridSize=(8,8))
enhanced = clahe.apply(gray_img)
cv2.imshow(enhanced_gray_img', enhanced)
现在我使用两个独立的内核执行高斯模糊,并按如下方式减去结果图像:
blur1 = cv2.GaussianBlur(enhanced, (15, 15), 0)
blur2 = cv2.GaussianBlur(enhanced, (25, 25), 0)
difference = blur2 - blur1
cv2.imshow('Difference_of_Gaussians', difference)
然后我在上面的图像上执行了二进制阈值并找到了轮廓。我绘制了面积最大的轮廓:
ret, th = cv2.threshold(difference, 127,255, 0) #---performed binary threshold ---
_, contours, hierarchy = cv2.findContours(th, cv2.RETR_EXTERNAL, 1) #---Find contours---
cnts = contours
max = 0 #----Variable to keep track of the largest area----
c = 0 #----Variable to store the contour having largest area---
for i in range(len(contours)):
if (cv2.contourArea(cnts[i]) > max):
max = cv2.contourArea(cnts[i])
c = i
rep = cv2.drawContours(img1, contours[c], -1, (0,255,0), 3) #----Draw the contour having the largest area on the image---
cv2.imshow('Final_Image.jpg', rep)
瞧!你去吧。
现在,您可以获得找到的轮廓的边界矩形,并将这些坐标作为区域提供给OCR,以提取存在的文本