加强代码:ray_image = gray_guss(temple_recognition) # 图像阈值化操作——获得二值化图 ret, temple_two = cv.threshold(gray_image, 0, 255, cv.THRESH_OTSU) cv_imshow("temple_two",temple_two) #膨胀操作,使字膨胀为一个近似的整体,为分割做准备 kernel = cv.getStructuringElement(cv.MORPH_RECT, (4, 25)) image = cv.dilate(temple_two, kernel) # # 中值滤波(去噪) # image = cv.medianBlur(image, 21) cv_imshow("image",image) ################################################################################# ################################################################################## # 查找轮廓 contours, hierarchy = cv.findContours(image, cv.RETR_EXTERNAL, cv.CHAIN_APPROX_SIMPLE) # cv.drawContours(temple_recognition,contours,-1,(0,0,255),3) # cv_imshow("dudu",temple_recognition) words = [] word_images = [] #对所有轮廓逐一操作 for item in contours: word = [] rect = cv.boundingRect(item) x = rect[0] y = rect[1] weight = rect[2] height = rect[3] word.append(x) word.append(y) word.append(weight) word.append(height) words.append(word) # 排序,车牌号有顺序。words是一个嵌套列表 words = sorted(words,key=lambda s:s[0],reverse=False) word_lenth = 0 #word中存放轮廓的起始点和宽高 for word in words: # 筛选字符的轮廓 #if (word[3] > (word[2] * 1.5)) and (word[3] < (word[2] * 3.5) or ((word[3] > (word[2] * 1.5))and(word[1]>201))): if(word[3] > (word[2] * 1.5)): word_lenth = word_lenth+1 splite_image = temple_two[word[1]:word[1] + word[3], word[0]:word[0] + word[2]] word_images.append(splite_image) del word_images[2] print(word_lenth) print(words) for i,j in enumerate(word_images): plt.subplot(1,word_lenth,i+1) plt.imshow(j,cmap='gray') plt.show()
时间: 2023-06-14 07:07:31 浏览: 188
guss-layout:低级响应式布局模式
这段代码主要是对车牌图像进行预处理,然后对车牌字符进行分割,得到单个字符图像。具体步骤如下:
1. 对车牌图像进行高斯模糊,然后进行阈值化操作,得到二值化图像。
2. 对二值化图像进行膨胀操作,使字体膨胀为一个近似的整体,为分割做准备。
3. 对膨胀后的图像进行中值滤波,去除噪声。
4. 使用findContours函数查找图像中的轮廓,并按照轮廓的x坐标进行排序,以保证车牌字符的顺序。
5. 对所有轮廓进行遍历,筛选出符合条件的字符轮廓,并将字符轮廓进行分割,得到单个字符图像。
6. 最后展示分割后的字符图像。
需要注意的是,该代码中使用了一些硬编码的参数,如腐蚀和中值滤波的参数、轮廓筛选的条件等,这些参数可能需要根据具体情况进行调整。
阅读全文