前言今年因為開始了第一份工作的關係,開始忙碌了起來,
但也因為工作的關係,使用了非常大量的 OpenCV 涵式庫。
但是函式庫總是那麼包山包海,而大家經常使用卻只有那一些,
希望能透過這次寫文章的機會找到一些很冷門、但卻有意外效果的 OpenCV 函式,
這系列是我學習過程中的筆記,另外過程中會不斷慢慢調整,
最終產出很多以 OpenCV 做的「濾鏡」。
-> 此系列文章的程式碼 github 這30天的程式碼都會放在 github,有需要歡迎大家自行取用~
(謎之聲:這裡還能偷看一些未發的文哦XD)
https://github.com/howarder3/ironman2020_OpenCV_photoshop
0. 此系列使用的環境與語言這系列的文章我會使用 opencv-python
(版本 4.4.0) 來撰寫,
搭配 jupyter notebook
進行一些簡單的實作。
1. 安裝 OpenCV但其實也就一行……打開你的terminal輸入
pip install opencv-python -y
(會下 -y
是不管什麼問題一概都yes,如果不要都yes請把他刪掉)
安裝會需要一點時間,請耐心等待…
另外提供一個自己的習慣,我通常會開一個新的 conda 環境
去安裝,
如果之後要刪除此套件,只需要直接刪除此環境,非常的乾淨俐落。
但使用 anaconda
建立新的環境超出此文討論的範圍,
再請讀者自行搜尋下載 anaconda
以及使用 conda 建立新的環境
。
或者也可直接服用github中的Day01_環境設定_environment_setting.ipynb
在 jupyter notebook
中執行以下程式碼:
!pip install opencv-python
!pip install matplotlib
並確認執行以下內容 不會跳出任何 error
就沒問題了!
import cv2
import numpy as np
import matplotlib.pyplot as plt
import glob
from IPython.display import clear_output
執行成功大概會長下面這樣:
附錄:OpenCV 快速測試用程式碼 (看會不會顯示出黑畫面)import numpy as np
import cv2
img = np.zeros((100,100,3)) # shape
cv2.imshow('test', img)
cv2.waitKey(0)
cv2.destroyAllWindows() # AW bigcase
2. 電腦中圖片的基本概念我們先了解一下一張圖片在電腦中怎麼儲存的,
圖片基本上就是「一格一格」的 pixel 存在電腦裡面,
不知道大家有沒有玩過類似下圖的遊戲
reference:google – CrossMe
電腦中的圖片就是像這張圖一樣,「一格一格」的 pixel 被儲存的,
3. 電腦中圖片的大小計算 黑白、灰階像我們常說的720p
,就是相對於上面的格子有 1280×720
格,
1080p
,就是相對於上面的格子有 1920x1080
格,
而 4K
是指 4096x2160
格(有沒有發現變成說比較大的數字了XD),
如果像上圖一樣,每一格要嘛是黑、要嘛是白,
我們稱此圖為「黑白」,每一格需要 1 bit 儲存。
而我們在圖像處理常使用的是「灰階」:
圖片還是黑白的,但由最黑到最白之間可有256種明亮度。
每一格 pixel 需要 8 bits (1 byte) 儲存
。
所以 720p
的「灰階」圖片,一共有 1280×720×1 bytes
= 921600 bytes = 921KB (接近1MB)
4. 電腦中圖片的大小計算 彩色(全彩、常說的RGB)對於彩色圖片,而我們在圖像處理常使用的是「全彩」:
全彩:每個顏色有三個通道 (R、G、B),每個通道以 8 bits (1 byte) 表示,
也就是說,每一個 pixel 使用了 24 bits (3 bytes) 來表示
,
所以,我們最多可以有1677萬種顏色。
所以 720p
的「全彩」圖片,一共有 1280×720×3 bytes
= 2764800 bytes = 2.7 MB
5. 電腦中圖片的座標軸 (x, y)
在電腦中我們儲存的圖片,預設的座標軸都是在「第四象限」!
並不是我們自然會認為的「第一象限」哦!
上圖舉了個簡單的例子,像是我畫的點(我有故意把點弄大啦XDD),
座標是在 (224, 648),小畫家的左下角也提供我們快速查詢座標的方式。
知道「座標」的概念,對於我們往後的圖形處理是非常重要的!
Reference單元一、影像處理基本概念
http://yuan.yocjh.kh.edu.tw/photoimpact/01.htm
⭐Python OpenCV 相關文章整理⭐: ⭐基礎知識篇⭐: 1. 【OpenCV】1 – 安裝 python OpenCV install 電腦中圖片的基本概念總整理 (附錄:OpenCV 快速測試用程式碼) 2. 【OpenCV】2 – OpenCV 圖片的讀取、顯示、存檔 (load, show, save),附贈簡易理解「相對路徑」與「絕對路徑」 3. 【OpenCV】OpenCV 利用 python OpenCV 查詢 image 大小, img shape sample code (內附範例程式碼) ⭐基本圖像處理篇⭐: 1. 【OpenCV】OpenCV 利用 python OpenCV 縮放圖片 image 大小, cv2 resize (內附程式碼) 2. 【OpenCV】3 – python OpenCV 的剪裁、旋轉、縮放 (crop, rotate, resize) 3. 【OpenCV】4 – 運用 OpenCV 調整光線 (modify brightness, intensity) 4. 【OpenCV】5 – 運用 OpenCV 調整亮度、飽和度(透過轉移至 HLS 顏色空間) modify lightness, saturation 5. 【OpenCV】6 – 運用 OpenCV 調整色調(冷色系/暖色系)、色溫(白平衡)modify color temperature, white balance 6. 【OpenCV】7 – 運用 OpenCV 為圖片增加一些顆粒感 (增加高斯噪點) add gaussian noise 7. 【OpenCV】8 – 運用 OpenCV 改變圖片的對比度 modify contrast (內含:網路上常見錯誤調整對比度方式的分析) 8. 【OpenCV】9 – 運用 OpenCV 降低圖片的高光 reduce highlights 9. 【OpenCV】11 – OpenCV 建立新空白圖、畫點、畫圓 create new pictures, draw points and draw circle 10. 【OpenCV】12 – 運用 OpenCV 畫線、畫矩形、畫橢圓 draw lines, draw rectangle, draw ellipse 11. 【OpenCV】13 – 運用 OpenCV 在圖片上寫文字、查色碼、顯示色碼顏色 write text, get and show RGB Color Code ⭐進階圖像處理篇⭐: 1. 【OpenCV】14 – 運用 OpenCV 顯示圖片直方圖、分離與合併RGB通道 show histogram, split, merge RGB channel 2. 【OpenCV】15 – OpenCV 當然也有像 ps 圖層的功能! 什麼?圖片也能加減法?! Add, Subtract, AddWeighted 3. 【OpenCV】16 – 運用 OpenCV 幫助我們找圖片的輪廓(高斯模糊、Canny) cv2.GaussianBlur, cv2.Canny 4. 【OpenCV】17 – 運用 OpenCV 的終極圖層處理大全, 想P圖該怎麼P (bitwise_or, and, xor, not, addWeighted) 5. 【OpenCV】18 – 運用 OpenCV 做圖片二值化,產生黑白的圖片吧!cv2.threshold 各種選擇參數大全 6. 【OpenCV】19 – OpenCV 的圖片自適應二值化,產生更好效果的黑白圖片!cv2.adaptiveThreshold 7. 【OpenCV】20 – OpenCV 的各種 Threshold 方法整理,Otsu’s Threshold 大津二值化,自動計算最佳閥值,做出最好的黑白效果圖! 8. 【OpenCV】26 – 銳化圖片,將模糊的圖片變得更清晰吧! sharpen images ⭐冷門應用篇⭐: 1. 【OpenCV】python OpenCV 分析影像模糊程度 檢測圖片模糊 blur sample code (內含範例程式碼) 2. 【OpenCV】21 – OpenCV 也有 photoshop 的魔術棒工具?! 漫水填充法 cv2.floodFill (Magic Wand Tool) 3. 【OpenCV】27 – 顏色映射 – OpenCV 內建的自動配色?! auto recolor images, cv2.applyColorMap ⭐影片處理篇⭐: 1. 【OpenCV】OpenCV 利用 python OpenCV 將圖片製作成一部影片 (內附程式碼) make video from images 2. 【OpenCV】OpenCV 利用 python OpenCV 將一部影片拆成一張張圖片 sample code (內附程式碼) get images from video 3. 【OpenCV】用 OpenCV 開啟 rtsp 即時影像串流 sample code (內含範例程式碼) – python OpenCV rtsp 4. 【OpenCV】python pyinotify video player 利用 OpenCV + inotify 製作即時影片播放器 sample code (內含範例程式碼) ⭐綜合應用篇⭐: 1. 【OpenCV】10 – 日系濾鏡總集篇,運用 OpenCV 製作屬於自己的濾鏡吧 (內含可於網頁上直接完成濾鏡的 colab ) 2. 【OpenCV】22 – 綜合運用1,用 OpenCV 來P圖囉! 來運用各種之前學習的各種東西吧! merge two images 3. 【OpenCV】23 – 綜合運用2,(資料標註) 用 OpenCV 來製作一個標記點小工具吧! 滑鼠與視窗控制 label points 4. 【OpenCV】24 – 綜合運用3,(應用app) 用 OpenCV 來製作一個照片文件掃描機吧! photo scanner 透視投影 5. 【OpenCV】25 – 綜合運用4,用 OpenCV 來把圖片p到各種奇怪的地方吧! 透視投影 cv2.warpPerspective, merge two images 6. 【OpenCV】28 – Final Project v1,於是沒錢買ps的我,開發了自己的photoshop,我的天啊 My photoshop made by OpenCV 7. 【OpenCV】29 – Final Project v2,於是沒錢買ps的我,開發了自己的photoshop,我的天啊 My photoshop made by OpenCV 8. 【OpenCV】30 – Final Project v3,於是沒錢買ps的我,開發了自己的photoshop,我的天啊 My photoshop made by OpenCV 9. 【OpenCV】用 python OpenCV 計算 iou 的方法 (內附範例程式碼) sample code ⭐【喜歡我的文章嗎? 歡迎幫我按讚~ 讓基金會請創作者喝一杯咖啡! 】
如果喜歡我的文章,請幫我在下方【按五下Like 】 (Google, Facebook 免註冊 ),會由 「LikeCoin 」 贊助作者鼓勵繼續創作,讀者們「只需幫忙按讚,完全不用出錢 」哦!
hi 您好,有問題想請教您,方便留line?
Hi 有問題歡迎透過 [email protected] 詢問哦,請先盡量詳述您的問題,方便我抽空思考回覆,感謝~~
^^”
Hi 有問題歡迎透過 [email protected] 詢問哦,請先盡量詳述您的問題,方便我抽空思考回覆,感謝~~