日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 人文社科 > 生活经验 >内容正文

生活经验

OpenCV(项目)车牌识别2 -- 车牌字符分割(直方图)

發(fā)布時(shí)間:2023/11/27 生活经验 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 OpenCV(项目)车牌识别2 -- 车牌字符分割(直方图) 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

目錄

試錯(cuò)

1、沒(méi)有膨脹/膨脹過(guò)小:無(wú)法連接上單個(gè)字符。?

2、膨脹過(guò)大:錯(cuò)誤連接相鄰字符。

一、直方圖處理原理

1、橫向分割

2、縱向分割

過(guò)程:

一、中值濾波、灰度化

二、二值化(統(tǒng)一黑底白字)

三、膨脹處理

四、統(tǒng)計(jì)各行各列白色像素個(gè)數(shù)(為繪制直方圖做準(zhǔn)備)

五、繪制直方圖(橫、縱)

六、分割車(chē)牌圖像

1、橫向分割:分割上下邊框

1-1、下半圖波谷

?1-2、上半圖波谷

代碼 及效果

2、縱向分割:分割字符

2-0、極大值判斷(去除左右兩邊過(guò)大的噪聲)

2-1、前谷(前一個(gè)波谷)

?2-2、字符開(kāi)始(上升)

2-3、字符結(jié)束

2-4、分割尾部雜質(zhì)

?2-5、最后的處理:檢查收尾情況

?總代碼及效果

參考資料


試錯(cuò)

一開(kāi)始嘗試的是形態(tài)學(xué)提取字符,但發(fā)現(xiàn)有些情況是相悖的,會(huì)顧此失彼,無(wú)法兼顧很多情況。?

1、沒(méi)有膨脹/膨脹過(guò)小:無(wú)法連接上單個(gè)字符。?

可以看到,一些沒(méi)有連接上的漢字,輪廓提取就把它們當(dāng)成了多個(gè)字符。

2、膨脹過(guò)大:錯(cuò)誤連接相鄰字符。

給予膨脹之后,膨脹又太大了,雖然同一個(gè)字符的不同筆畫(huà)連接成功,但是又錯(cuò)誤地把兩個(gè)字符連接在了一起。?

?

??

????????上面的算法感覺(jué)很難行得通了,除非借助其他分割算法。下面是優(yōu)化后的更佳算法,用直方圖處理

一、直方圖處理原理

1、橫向分割

分割上下邊框

????????把圖像分為上下兩部分,根據(jù)像素點(diǎn)的個(gè)數(shù),找到最小的像素行最小波谷)。?上半部分最小波谷作為下半部分最小波谷作為

?

2、縱向分割

切割字符

每一個(gè)字符前面都一定會(huì)有波谷出現(xiàn),波谷出現(xiàn)再上升的時(shí)候,作為字符開(kāi)始的判斷標(biāo)志。

?

?

過(guò)程:

一、中值濾波、灰度化

# 1、中值濾波mid = cv.medianBlur(image, 5)# 2、灰度化gray = cv.cvtColor(mid, cv.COLOR_BGR2GRAY)

二、二值化(統(tǒng)一黑底白字)

# 3、二值化ret, binary = cv.threshold(gray, 0, 255, cv.THRESH_OTSU)# 統(tǒng)一得到黑底白字if(IsWhiteMore(binary)):     #白色部分多則為真,意味著背景是白色,需要黑底白字ret, binary = cv.threshold(gray, 0, 255, cv.THRESH_OTSU | cv.THRESH_BINARY_INV)cv.imshow('binary', binary)
# 得到黑底白字(白色多則返回真)
def IsWhiteMore(binary):white = black = 0height, width = binary.shape# 遍歷每個(gè)像素for i in range(height):for j in range(width):if binary[i,j]==0:black+=1else:white+=1if white >= black:return Trueelse:return False

三、膨脹處理

?主要就是為了連接像“川”這樣的橫向不連接的字符。

# 4、膨脹(粘貼橫向字符)kernel = cv.getStructuringElement(cv.MORPH_RECT, (7,1))     #橫向連接字符dilate = cv.dilate(binary, kernel)cv.imshow('dilate', dilate)

四、統(tǒng)計(jì)各行各列白色像素個(gè)數(shù)(為繪制直方圖做準(zhǔn)備)

# 5、統(tǒng)計(jì)各行各列白色像素個(gè)數(shù)(為了得到直方圖橫縱坐標(biāo))ptx, pty = White_Statistic(dilate)
# 二-5、統(tǒng)計(jì)白色像素點(diǎn)(分別統(tǒng)計(jì)每一行、每一列)
def White_Statistic(image):ptx = []  # 每行白色像素個(gè)數(shù)pty = []  # 每列白色像素個(gè)數(shù)height, width = image.shape# 逐行遍歷for i in range(height):num = 0for j in range(width):if(image[i][j]==255):num = num+1ptx.append(num)# 逐列遍歷for i in range(width):num = 0for j in range(height):if (image[j][i] == 255):num = num + 1pty.append(num)return ptx, pty

五、繪制直方圖(橫、縱)

有了直方圖,可以很直觀地看出每一行、每一列的像素分布情況。?

# 6、繪制直方圖(橫、縱)Draw_Hist(ptx, pty)
# 二-6、繪制直方圖
def Draw_Hist(ptx, pty):# 依次得到各行、列rows, cols = len(ptx), len(pty)row = [i for i in range(rows)]col = [j for j in range(cols)]# 橫向直方圖plt.barh(row, ptx, color='black', height=1)#       縱    橫plt.show()# 縱向直方圖plt.bar(col, pty, color='black', width=1)#       橫    縱plt.show()

?

六、分割車(chē)牌圖像

# 二-7、分割車(chē)牌圖像(根據(jù)直方圖)
def Cut_Image(ptx, pty, binary, dilate):h1 = h2 = 0#頂  底begin = False        #標(biāo)記開(kāi)始/結(jié)束# 1、依次得到各行、列rows, cols = len(ptx), len(pty)row = [i for i in range(rows)]col = [j for j in range(cols)]# 2、橫向分割:上下邊框h1, h2 = Cut_X(ptx, rows)# 3、縱向分割:分割字符Cut_Y(pty, cols, h1, h2, binary)

1、橫向分割:分割上下邊框

????????把圖像分為兩部分:上半圖和下半圖,分別找它們的波谷,就可以確定字符上下邊緣,進(jìn)行分割。?

1-1、下半圖波谷

在下半圖找波谷,確定字符的下邊緣。?

# 1、下半圖波谷min, r = 300, 0for i in range(int(rows / 2)):if ptx[i] < min:min = ptx[i]r = ih1 = r  # 添加下行(作為頂)

?1-2、上半圖波谷

在上半圖找波谷,確定字符的上邊緣。?

# 2、上半圖波谷min, r = 300, 0for i in range(int(rows / 2), rows):if ptx[i] < min:min = ptx[i]r = ih2 = r  # 添加上行(作為底)

代碼 及效果

# 2、橫向分割:上下邊框h1, h2 = Cut_X(ptx, rows)cut_x = binary[h1:h2, :]cv.imshow('cut_x', cut_x)
# 二-7-2、橫向分割:上下邊框
def Cut_X(ptx, rows):# 橫向切割(分為上下兩張圖,分別找其波谷,確定頂和底)# 1、下半圖波谷min, r = 300, 0for i in range(int(rows / 2)):if ptx[i] < min:min = ptx[i]r = ih1 = r  # 添加下行(作為頂)# 2、上半圖波谷min, r = 300, 0for i in range(int(rows / 2), rows):if ptx[i] < min:min = ptx[i]r = ih2 = r  # 添加上行(作為底)return h1, h2

?可以看到,上下邊框明顯得到了適當(dāng)?shù)那懈?#xff0c;尤其是下邊框。

?

?

2、縱向分割:分割字符

2-0、極大值判斷(去除左右兩邊過(guò)大的噪聲)

如果在左邊或者右邊出現(xiàn)極大值(左右按10%計(jì)算),則視為噪聲,進(jìn)行處理。

?

?

?

?

# 0、極大值判斷if pty[j] == max(pty):if j < 30:  # 左邊(跳過(guò))w2 = jif begin == True:begin = Falsecontinueelif j > 270:  # 右邊(直接收尾)if begin == True:begin = Falsew2 = jb_copy = binary.copy()b_copy = b_copy[h1:h2, w1:w2]cv.imshow('binary%d-%d' % (count, con), b_copy)cv.imwrite('car_characters/image%d-%d.jpg' % (count, con), b_copy)con += 1break

2-1、前谷(前一個(gè)波谷)

# 1、前谷(前面的波谷)if pty[j] < 12 and begin == False:  # 前谷判斷:像素?cái)?shù)量<12last = pty[j]w = j

?2-2、字符開(kāi)始(上升)

# 2、字符開(kāi)始(上升)elif last < 12 and pty[j] > 20:last = pty[j]w1 = jbegin = True

?

2-3、字符結(jié)束

情景一:單個(gè)字符:直接分割(判斷語(yǔ)句中過(guò)濾掉噪聲)

# 3-1、分割并顯示(排除過(guò)小情況)if 10 < width < WIDTH + 3:  # 要排除掉干擾,又不能過(guò)濾掉字符”1“b_copy = binary.copy()b_copy = b_copy[h1:h2, w1:w2]cv.imshow('binary%d-%d' % (count, con), b_copy)cv.imwrite('car_characters/image%d-%d.jpg' % (count, con), b_copy)con += 1

情景二:多個(gè)字符:從多字符中分割單字符

?

# 3-2、從多個(gè)貼合字符中提取單個(gè)字符elif width >= WIDTH + 3:# 統(tǒng)計(jì)貼合字符個(gè)數(shù)num = int(width / WIDTH + 0.5)  # 四舍五入for k in range(num):# w1和w2坐標(biāo)向后移(用w3、w4代替w1和w2)w3 = w1 + k * WIDTHw4 = w1 + (k + 1) * WIDTHb_copy = binary.copy()b_copy = b_copy[h1:h2, w3:w4]cv.imshow('binary%d-%d' % (count, con), b_copy)cv.imwrite('car_characters/image%d-%d.jpg' % (count, con), b_copy)con += 1

2-4、分割尾部雜質(zhì)

由于車(chē)牌提取的時(shí)候沒(méi)處理好,導(dǎo)致車(chē)牌尾部有些許雜質(zhì) 。

?

# 4、分割尾部噪聲(距離過(guò)遠(yuǎn)默認(rèn)沒(méi)有字符了)elif begin == False and (j - w2) > 30:break

?2-5、最后的處理:檢查收尾情況

?如果最后沒(méi)有下降沿(波谷),那么它就不會(huì)判斷為字符,那么可能會(huì)遺漏掉最后一個(gè)字符。所以我們進(jìn)行一個(gè)收尾的操作。

# 最后檢查收尾情況if begin == True:w2 = 295b_copy = binary.copy()b_copy = b_copy[h1:h2, w1:w2]cv.imshow('binary%d-%d' % (count, con), b_copy)cv.imwrite('car_characters/image%d-%d.jpg' % (count, con), b_copy)

?總代碼及效果

# 車(chē)牌識(shí)別
import cv2 as cv
import numpy as np
import os
from matplotlib import pyplot as plt# 得到黑底白字(白色多則返回真)
def IsWhiteMore(binary):white = black = 0height, width = binary.shape# 遍歷每個(gè)像素for i in range(height):for j in range(width):if binary[i,j]==0:black+=1else:white+=1if white >= black:return Trueelse:return False# 限制圖像大小(車(chē)牌)
def Limit(image):height, width, channel = image.shape# 設(shè)置權(quán)重weight = width/300# 計(jì)算輸出圖像的寬和高last_width = int(width/weight)last_height = int(height/weight)image = cv.resize(image, (last_width, last_height))return image# 二-5、統(tǒng)計(jì)白色像素點(diǎn)(分別統(tǒng)計(jì)每一行、每一列)
def White_Statistic(image):ptx = []  # 每行白色像素個(gè)數(shù)pty = []  # 每列白色像素個(gè)數(shù)height, width = image.shape# 逐行遍歷for i in range(height):num = 0for j in range(width):if(image[i][j]==255):num = num+1ptx.append(num)# 逐列遍歷for i in range(width):num = 0for j in range(height):if (image[j][i] == 255):num = num + 1pty.append(num)return ptx, pty# 二-6、繪制直方圖
def Draw_Hist(ptx, pty):# 依次得到各行、列rows, cols = len(ptx), len(pty)row = [i for i in range(rows)]col = [j for j in range(cols)]# 橫向直方圖plt.barh(row, ptx, color='black', height=1)#       縱    橫plt.show()# 縱向直方圖plt.bar(col, pty, color='black', width=1)#       橫    縱plt.show()# 二-7-2、橫向分割:上下邊框
def Cut_X(ptx, rows):# 橫向切割(分為上下兩張圖,分別找其波谷,確定頂和底)# 1、下半圖波谷min, r = 300, 0for i in range(int(rows / 2)):if ptx[i] < min:min = ptx[i]r = ih1 = r  # 添加下行(作為頂)# 2、上半圖波谷min, r = 300, 0for i in range(int(rows / 2), rows):if ptx[i] < min:min = ptx[i]r = ih2 = r  # 添加上行(作為底)return h1, h2# 二-7-3、縱向分割:分割字符
def Cut_Y(pty, cols, h1, h2, binary):WIDTH = 32          # 經(jīng)過(guò)測(cè)試,一個(gè)字符寬度約為32w = w1 = w2 = 0     # 前谷 字符開(kāi)始 字符結(jié)束begin = False       # 字符開(kāi)始標(biāo)記last = 10           # 上一次的值con = 0             # 計(jì)數(shù)# 縱向切割(正式切割字符)for j in range(int(cols)):# 0、極大值判斷if pty[j] == max(pty):if j < 30:  # 左邊(跳過(guò))w2 = jif begin == True:begin = Falsecontinueelif j > 270:  # 右邊(直接收尾)if begin == True:begin = Falsew2 = jb_copy = binary.copy()b_copy = b_copy[h1:h2, w1:w2]cv.imshow('binary%d-%d' % (count, con), b_copy)cv.imwrite('car_characters/image%d-%d.jpg' % (count, con), b_copy)con += 1break# 1、前谷(前面的波谷)if pty[j] < 12 and begin == False:  # 前谷判斷:像素?cái)?shù)量<12last = pty[j]w = j# 2、字符開(kāi)始(上升)elif last < 12 and pty[j] > 20:last = pty[j]w1 = jbegin = True# 3、字符結(jié)束elif pty[j] < 13 and begin == True:begin = Falselast = pty[j]w2 = jwidth = w2 - w1# 3-1、分割并顯示(排除過(guò)小情況)if 10 < width < WIDTH + 3:  # 要排除掉干擾,又不能過(guò)濾掉字符”1“b_copy = binary.copy()b_copy = b_copy[h1:h2, w1:w2]cv.imshow('binary%d-%d' % (count, con), b_copy)cv.imwrite('car_characters/image%d-%d.jpg' % (count, con), b_copy)con += 1# 3-2、從多個(gè)貼合字符中提取單個(gè)字符elif width >= WIDTH + 3:# 統(tǒng)計(jì)貼合字符個(gè)數(shù)num = int(width / WIDTH + 0.5)  # 四舍五入for k in range(num):# w1和w2坐標(biāo)向后移(用w3、w4代替w1和w2)w3 = w1 + k * WIDTHw4 = w1 + (k + 1) * WIDTHb_copy = binary.copy()b_copy = b_copy[h1:h2, w3:w4]cv.imshow('binary%d-%d' % (count, con), b_copy)cv.imwrite('car_characters/image%d-%d.jpg' % (count, con), b_copy)con += 1# 4、分割尾部噪聲(距離過(guò)遠(yuǎn)默認(rèn)沒(méi)有字符了)elif begin == False and (j - w2) > 30:break# 最后檢查收尾情況if begin == True:w2 = 295b_copy = binary.copy()b_copy = b_copy[h1:h2, w1:w2]cv.imshow('binary%d-%d' % (count, con), b_copy)cv.imwrite('car_characters/image%d-%d.jpg' % (count, con), b_copy)# 二-7、分割車(chē)牌圖像(根據(jù)直方圖)
def Cut_Image(ptx, pty, binary, dilate):h1 = h2 = 0#頂  底begin = False        #標(biāo)記開(kāi)始/結(jié)束# 1、依次得到各行、列rows, cols = len(ptx), len(pty)row = [i for i in range(rows)]col = [j for j in range(cols)]# 2、橫向分割:上下邊框h1, h2 = Cut_X(ptx, rows)# cut_x = binary[h1:h2, :]# cv.imshow('cut_x', cut_x)# 3、縱向分割:分割字符Cut_Y(pty, cols, h1, h2, binary)# 一、形態(tài)學(xué)提取車(chē)牌
def Get_Licenses(image):# 1、轉(zhuǎn)灰度圖gray = cv.cvtColor(image, cv.COLOR_RGB2GRAY)# cv.imshow('gray', gray)# 2、頂帽運(yùn)算# gray = cv.equalizeHist(gray)kernel = cv.getStructuringElement(cv.MORPH_RECT, (17,17))tophat = cv.morphologyEx(gray, cv.MORPH_TOPHAT, kernel)# cv.imshow('tophat', tophat)# 3、Sobel算子提取y方向邊緣(揉成一坨)y = cv.Sobel(tophat, cv.CV_16S, 1,     0)absY = cv.convertScaleAbs(y)# cv.imshow('absY', absY)# 4、自適應(yīng)二值化(閾值自己可調(diào))ret, binary = cv.threshold(absY, 75, 255, cv.THRESH_BINARY)# cv.imshow('binary', binary)# 5、開(kāi)運(yùn)算分割(縱向去噪,分隔)kernel = cv.getStructuringElement(cv.MORPH_RECT, (1, 15))Open = cv.morphologyEx(binary, cv.MORPH_OPEN, kernel)# cv.imshow('Open', Open)# 6、閉運(yùn)算合并,把圖像閉合、揉團(tuán),使圖像區(qū)域化,便于找到車(chē)牌區(qū)域,進(jìn)而得到輪廓kernel = cv.getStructuringElement(cv.MORPH_RECT, (41, 15))close = cv.morphologyEx(Open, cv.MORPH_CLOSE, kernel)# cv.imshow('close', close)# 7、膨脹/腐蝕(去噪得到車(chē)牌區(qū)域)# 中遠(yuǎn)距離車(chē)牌識(shí)別kernel_x = cv.getStructuringElement(cv.MORPH_RECT, (25, 7))kernel_y = cv.getStructuringElement(cv.MORPH_RECT, (1, 11))# 近距離車(chē)牌識(shí)別# kernel_x = cv.getStructuringElement(cv.MORPH_RECT, (79, 15))# kernel_y = cv.getStructuringElement(cv.MORPH_RECT, (1, 31))# 7-1、腐蝕、膨脹(去噪)erode_y = cv.morphologyEx(close, cv.MORPH_ERODE, kernel_y)# cv.imshow('erode_y', erode_y)dilate_y = cv.morphologyEx(erode_y, cv.MORPH_DILATE, kernel_y)# cv.imshow('dilate_y', dilate_y)# 7-1、膨脹、腐蝕(連接)(二次縫合)dilate_x = cv.morphologyEx(dilate_y, cv.MORPH_DILATE, kernel_x)# cv.imshow('dilate_x', dilate_x)erode_x = cv.morphologyEx(dilate_x, cv.MORPH_ERODE, kernel_x)# cv.imshow('erode_x', erode_x)# 8、腐蝕、膨脹:去噪kernel_e = cv.getStructuringElement(cv.MORPH_RECT, (25, 9))erode = cv.morphologyEx(erode_x, cv.MORPH_ERODE, kernel_e)# cv.imshow('erode', erode)kernel_d = cv.getStructuringElement(cv.MORPH_RECT, (25, 11))dilate = cv.morphologyEx(erode, cv.MORPH_DILATE, kernel_d)# cv.imshow('dilate', dilate)# 9、獲取外輪廓img_copy = image.copy()# 9-1、得到輪廓contours, hierarchy = cv.findContours(dilate, cv.RETR_EXTERNAL, cv.CHAIN_APPROX_SIMPLE)# 9-2、畫(huà)出輪廓并顯示cv.drawContours(img_copy, contours, -1, (255, 0, 255), 2)# cv.imshow('Contours', img_copy)# 10、遍歷所有輪廓,找到車(chē)牌輪廓i = 0for contour in contours:# 10-1、得到矩形區(qū)域:左頂點(diǎn)坐標(biāo)、寬和高rect = cv.boundingRect(contour)# 10-2、判斷寬高比例是否符合車(chē)牌標(biāo)準(zhǔn),截取符合圖片if rect[2]>rect[3]*3 and rect[2]<rect[3]*7:# 截取車(chē)牌并顯示print(rect)img_copy = image.copy()image = image[(rect[1]):(rect[1]+rect[3]), (rect[0]):(rect[0]+rect[2])] #高,寬try:# 限制大小(按照比例限制)image = Limit(image)cv.imshow('license plate%d-%d' % (count, i), image)cv.imwrite('car_licenses/image%d-%d.jpg'%(count, i), image)i += 1return imageexcept:passreturn image# 二、直方圖提取字符
def Get_Character(image):# 1、中值濾波mid = cv.medianBlur(image, 5)# 2、灰度化gray = cv.cvtColor(mid, cv.COLOR_BGR2GRAY)# 3、二值化ret, binary = cv.threshold(gray, 0, 255, cv.THRESH_OTSU)# 統(tǒng)一得到黑底白字if(IsWhiteMore(binary)):     #白色部分多則為真,意味著背景是白色,需要黑底白字ret, binary = cv.threshold(gray, 0, 255, cv.THRESH_OTSU | cv.THRESH_BINARY_INV)cv.imshow('binary', binary)# 4、膨脹(粘貼橫向字符)kernel = cv.getStructuringElement(cv.MORPH_RECT, (7,1))     #橫向連接字符dilate = cv.dilate(binary, kernel)# cv.imshow('dilate', dilate)# 5、統(tǒng)計(jì)各行各列白色像素個(gè)數(shù)(為了得到直方圖橫縱坐標(biāo))ptx, pty = White_Statistic(dilate)# 6、繪制直方圖(橫、縱)Draw_Hist(ptx, pty)# 7、分割(橫、縱)(橫向分割邊框、縱向分割字符)Cut_Image(ptx, pty, binary, dilate)# cv.waitKey(0)if __name__ == '__main__':global countcount=0         #計(jì)數(shù):第幾張圖片# 遍歷文件夾中的每張圖片(車(chē))for car in os.listdir('cars'):# 1、獲取路徑path = 'cars/'+'car'+str(count)+'.jpg'# 2、獲取圖片img = cv.imread(path)image = img.copy()# cv.imshow('image', image)# 3、提取車(chē)牌image = Get_Licenses(image)         #形態(tài)學(xué)提取車(chē)牌# 4、提取字符Get_Character(image)count += 1cv.waitKey(0)

?

?(“滬”前面的痕跡由于提取的過(guò)程處理不到位,這里實(shí)在是不好處理,直方圖上和它都連一起了,所以無(wú)能為力,有辦法的伙伴可以建議建議)

?(好家伙,直方圖上看完全就是一個(gè)字了。。。)

?????????后面的一部分車(chē)牌提取都做的不到位,字符也分離自然不是很好。目前做的還挺菜的,有好建議的伙伴可以提出來(lái)。

參考資料

https://www.bilibili.com/video/BV1yg4y187kU?p=2

https://blog.csdn.net/shanglianlm/article/details/78045170?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522163037372316780271535395%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=163037372316780271535395&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~baidu_landing_v2~default-4-78045170.first_rank_v2_pc_rank_v29&utm_term=%E8%BD%A6%E7%89%8C%E8%AF%86%E5%88%AB%E5%AD%97%E7%AC%A6%E5%88%86%E5%89%B2%E6%96%B9%E6%B3%95&spm=1018.2226.3001.4187

總結(jié)

以上是生活随笔為你收集整理的OpenCV(项目)车牌识别2 -- 车牌字符分割(直方图)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。