iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 1
0
自我挑戰組

學習筆記系列 第 2

了解圖片內容

  • 分享至 

  • xImage
  •  

記錄學習內容。
主要是看網路上的文章和影片,做些紀錄。
內容可能有錯誤。
主要是把這邊當作自己寫筆記的地方。

接著來了解,要怎麼讓圖片,最容易被辨識:
[ 實用心得 ] Tesseract-OCR

先處理好圖片 , 才會比較容易辨識 , 就一個一個慢慢了解吧!
先看教學,了解影像處理
MATLAB教學 - 08影像處理(一)

MATLAB教學 - 09影像處理(二)

整理

1

來查看灰階圖片長怎樣 :
但是在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像素
https://ithelp.ithome.com.tw/upload/images/20200901/20111994sw3p2iMu6F.png

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

2

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萬左右的個數) ,所以有點難觀察整個矩陣:
https://ithelp.ithome.com.tw/upload/images/20200901/20111994ZruIP1WDY1.png

3

接著文章有講

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))

上一篇
Tesseract安裝
下一篇
Tesseract 測試
系列文
學習筆記46
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言