記錄學習內容。
主要是看網路上的文章和影片,做些紀錄。
內容可能有錯誤。
主要是把這邊當作自己寫筆記的地方。
接著來了解,要怎麼讓圖片,最容易被辨識:
[ 實用心得 ] Tesseract-OCR
先處理好圖片 , 才會比較容易辨識 , 就一個一個慢慢了解吧!
先看教學,了解影像處理
MATLAB教學 - 08影像處理(一)
整理
來查看灰階圖片長怎樣 :
但是在jupyter看矩陣的時候,只看到這些
[[0 0 0 ... 0 0 0]
[0 0 0 ... 0 0 0]
[0 0 0 ... 0 0 0]
...
[0 0 0 ... 0 0 0]
[0 0 0 ... 0 0 0]
[0 0 0 ... 0 0 0]]
先了解矩陣內容:
[Day07]Learning Numpy - 建立、合併、分割
Numpy 陣列屬性
ndim():取得陣列的維度數量
shape():陣列的形狀
size():陣列的數量
dtype():資料型態
itemsize():陣列中元素的大小(位元組為單位)
nbytes():陣列的大小(位元組為單位) 一般來說 nbytes = itemsize * size
ndim() 等於2 , 代表矩陣 是 2 維陣列
shape() 等於 (720, 1280) , 代表尺寸是1280*720 。寬度1280像素、高度720像素
size() 等於 921600 代表1280*720=921600
dtype 等於 uint8 ,代表資料型態 。uint8 應該是 Unsigned integer (0 to 255) ,整數0到255
itemsize 等於 1 ,因為uint8 是8bit 。所以等於1個位元組(bytes)
nbytes() 等於921600 因為 : 陣列個數(1280*720) * 元素大小 (1bytes)
print(img.ndim) #3
print(img.shape) #(720, 1280, 3)
print(img.size) # 2764800
print(img.dtype) # uint8
print(img.itemsize) #1
Jupyter 看不到完整的陣列內容 ,那就用迴圈先把東西寫到一個文字檔,來試試看
參考:
How do I access the pixels of an image using OpenCV-Python?
程式:
from PIL import Image
image = Image.open("greytest.jpg")
image_data = np.asarray(image)
f = open("demo.txt", "a")
for i in range(len(image_data)):
for j in range(len(image_data[0])):
print(image_data[i][j]) # this row prints an array of RGB color for each pixel in the image
f.write(str(image_data[i][j]))
f.write("\n")
f.close()
變成這樣了,因為1280*720 ,代表有921600 (92萬左右的個數) ,所以有點難觀察整個矩陣:
接著文章有講
Tesseract在DPI為至少為300 DPI的圖像上效果最佳,所以需要考慮提高圖片的DPI,一般圖片默認的都是72 。
先大概了解DPI 是什麼 。
參考:
什麼是像素、解析度、DPI、PPI,看這篇文章就夠了
像素(pixel) : 圖片元素 ,圖片由一格一格的點(像素)組成,每個點都用 紅、綠、藍 組成一個顏色。
解析度(Image resolution) :
1920×1080是指橫向有1920個像素點,縱向有1080個像素點。
DPI,英文Dots Per Inch,每英寸點數。
每1英吋 ,有幾個點 。
所以水平解析度96dpi ,就是 每1 英寸有96個點 ,換句話說 每1個點 距離 1/96 英吋
Dpi 越高 ,就代表 每英寸點數 越多 ,畫質就越好。
1英吋(in) = 2.54 公分(cm)
PPI,英文Pixels Per Inch,每英吋像素。
每英吋像素 跟 每英寸點數 有什麼不同?
一個“點”通常就是一個“像素” ,沒什麼不同。稱呼不同只是代表不同使用場合。
4
那要怎麼把圖片 從 96dpi 變成 300dpi ?
參考:
https://stackoverflow.com/questions/9174338/programmatically-change-image-resolution
im.save("300.png", dpi=(300,300))