我只是一名搬磚工般哼,無意侵犯各位大佬知識產(chǎn)權(quán)。
最近因項(xiàng)目組需要惠窄,開始學(xué)圖像處理
所以記錄一下這個(gè)過程以及經(jīng)驗(yàn)蒸眠,希望能幫到大家
學(xué)習(xí)參考資料:
- github 上的OpenCV-Python-Tutorial
若想系統(tǒng)地學(xué)習(xí),麻煩移步到 github或買書啃一下
安裝 Python openCV
- 上 anaconda cloud 搜索 opencv
-
選擇合適的版本杆融,我選的是第四個(gè)(anaconda/opencv, 其他版本我也不懂楞卡,要請教其他大佬)
- 點(diǎn)擊去,根據(jù)上面的命令安裝脾歇,比如:這個(gè)是 conda install -c anaconda opencv (藍(lán)色框)
- 將這一句命令直接復(fù)制到你的 termnial (mac端) 或 cmder (win端, win+R, 輸入 'cmd'蒋腮,出現(xiàn)小黑框),直接按回車介劫,anaconda 會檢查需要安裝的附加包徽惋,選擇 y,一并下載和安裝座韵。
-
紅色框是 opencv 的官方說明(英文),有能力的朋友可以看看,這會學(xué)習(xí)很有幫助
如果不知道什么是 anaconda誉碴,或者還沒有安裝 Python 的朋友宦棺,建議可以看看我寫的另一篇文章
測試是否安裝成功
- 準(zhǔn)備一張圖片,打開 spyder
import cv2
png = '/Users/brain.png' ##圖片放置的路徑黔帕,最好放絕對路徑代咸,肯定不會出錯(cuò)。(我是 mac 玩家成黄,win 玩家自行修改)
img = cv2.imread(png,0) # imread 讀入(加載)圖片呐芥,參數(shù)1,圖片文件路徑奋岁,參數(shù)2思瘟,讀入圖片格式,*1*:彩色(默認(rèn))闻伶,*0*:灰度圖滨攻,*-1*:包含透明通道的彩色圖
cv2.imshow('brain',img) ## 顯示圖片,參數(shù)1蓝翰,窗口名字(隨便命名)光绕,參數(shù)2,要顯示的圖片
直接使用 imshow畜份,不能調(diào)節(jié)顯示窗口大小.png
可以先預(yù)設(shè)一個(gè)窗口 namedWindow诞帐,在這個(gè)窗口中打開圖片,這樣設(shè)置的窗口可以在打開后調(diào)整大小爆雹,適用于圖片較大的情況
import cv2
png = '/Users/brain.png'
img = cv2.imread(png,0)
# 先定義窗口停蕉,后顯示圖片
cv2.namedWindow('brain2', cv2.WINDOW_NORMAL) ##參數(shù)1是窗口名字,參數(shù)2 可選(cv2.WINDOW_AUTOSIZE:窗口大小自適應(yīng)圖片, cv2.WINDOW_NORMAL:窗口大小可調(diào)整)
cv2.imshow('brain2', img)
cv2.waitKey(0)
### waitKey 是讓程序暫停顶别,數(shù)字是暫停的時(shí)間谷徙,0代表一直等待
# 等待期間可以獲取用戶按鍵輸入,如
k = cv2.waitKey(0)
if k == 's':
cv2.imshow('brain2', img)
cv2.destroyAllWindows() ### 關(guān)閉所有打開的窗口
使用namedWindow里面的cv2.WINDOW_NORMAL可以設(shè)置窗口大小.png
保存照片 cv2.imwrite()
import cv2
png = '/Users/brain.png'
picture = cv2.imread(png,0)
cv2.imwrite('brain_gray.jpg',picture)
處理前后對比.png
小結(jié) (基礎(chǔ)測試操作)
-
cv2.imread() 讀入圖片
- 如果缺少文件驯绎,權(quán)限不當(dāng)完慧,格式不受支持或無效,當(dāng)print(圖片)時(shí)剩失,將返回None.
- 該函數(shù)通過內(nèi)容而不是文件擴(kuò)展名來決定圖像類型.
- 圖像數(shù)據(jù)將以B,G,R的順序存儲. (mat接口)
-
cv2.imshow() 顯示圖片
- 打開圖片后退出關(guān)閉不了屈尼,卡住了
解決辦法:(在我 macbook 上成功了,供大家參考) - 用 cv2.destroyAllWindows()拴孤,并在其后面加 cv2.waitKey(1)
cv2.destroyAllWindows() cv2.waitKey(1)
其他地方爬到的解釋脾歧,我沒沒怎么看懂,但是確實(shí)有用.png - 打開圖片后退出關(guān)閉不了屈尼,卡住了
-
cv2.imwrite() 保存圖片
- cv2.imwrite(filename, img,[, params]) ## filename 保持路徑演熟,img保存的圖像名鞭执,
- params (對于JPEG司顿,其表示的是圖像的質(zhì)量,用0 - 100的整數(shù)表示兄纺,默認(rèn)95大溜;對于png ,第 三個(gè)參數(shù)表示的是壓縮級別。默認(rèn)為3)
- 完整代碼:
cv2.imwrite('/Users/output/brain.png', img,[int(cv2.IMWRITE_JPEG_QUALITY), 90])
-
cv2.waitKey(0) 讓程序等待
- 括號里面的數(shù)字代表時(shí)間估脆,單位 ms钦奋。0表示一直等待
- 在等待的過程中,可以接受用戶輸入疙赠,如:
需要注意的是付材,這里的輸入不在 console,而是要點(diǎn)擊圖片窗口
input = cv2.waitKey(0)
應(yīng)用: (原地址)
- 加載一幅灰度圖像圃阳,顯示它厌衔,如果按's'則保存圖像并退出,如果按ESC鍵直接退出
import cv2
img = cv2.imread('/Users/brain.png',0)
cv2.imshow('brain',img)
k = cv2.waitKey(0)& 0xFF
if k == 27: # wait for ESC key to exit
cv2.destroyAllWindows()
cv2.waitKey(1)
elif k == ord('s'): # wait for 's' key to save and exit
cv2.imwrite('brain_gray.png',img)
cv2.destroyAllWindows()
cv2.waitKey(1)
- 和Python 的Matplotlib結(jié)合使用.
import cv2
from matplotlib import pyplot as plt
img = cv2.imread('/Users/brain.png',0)
plt.imshow(img, cmap = 'gray', interpolation = 'bicubic')
plt.xticks([]), plt.yticks([]) # to hide tick values on X and Y axis
plt.show()