番外1. OpenCV 圖像處理之圖片加載與視頻加載

      網(wǎng)友投稿 1046 2025-04-01

      本系列專欄寫作方式交代

      本系列專欄寫作將采用首創(chuàng)的問答式寫作形式,快速讓你學(xué)習(xí)到 OpenCV 的初級、中級、高級知識。

      1. OpenCV 中圖片是如何加載與顯示的?

      學(xué)習(xí) OpenCV 的第一步就是加載圖片,類似學(xué)習(xí)任何編程語言的 Hello Word一樣, 將電腦磁盤上的圖片加載到程序中,才可以進(jìn)行后續(xù)的操作。

      在加載圖片的過程中,我們將使用到三個核心函數(shù),分別如下:

      cv2.imread 讀取圖片

      cv2.imshow 展示圖片

      cv2.imwrite 寫入圖片

      任何圖像處理領(lǐng)域的高手,都是伴隨這三個函數(shù)起步的,接下來你也將接觸到這3個起始函數(shù)啦

      cv2.imread 讀取圖片的用法與注意事項(xiàng)

      在讀取圖片之前,你首先要知道圖片所在的位置,即電腦磁盤路徑,該部分如果你完全零基礎(chǔ),建議你學(xué)習(xí)【絕對路徑】與【相對路徑】相關(guān)知識。

      cv2.imread 函數(shù)具備兩個必會參數(shù),其一圖片路徑,其二是讀取方式,也就是告訴程序如何讀取這幅圖像。

      第一個參數(shù)的取值非常簡單,就是電腦上任意圖片路徑即可,重點(diǎn)注意圖片的后綴名(擴(kuò)展名),

      第二個參數(shù)取值非常多,初學(xué)階段掌握以下兩個數(shù)值即可

      cv2.IMREAD_COLOR,讀取彩色圖像,此時忽略圖像的透明度,使用該值時,如果讀取的是透明 png 圖片,一定要注意,透明通道不會被讀取到

      cv2.IMREAD_GRAYSCALE 灰度圖方式讀取

      CV2.IMREAD_UNCHANGED 讀入的圖像包括 alpha 通道,即透明通道

      這里存在一個問題,需要特別說明一下:

      除了上述幾個值以外,還有其他值,但是在學(xué)習(xí)階段可以先略過,等到需要的時候。

      那這里就有一個常見疑問,就是存在這樣一個值 cv2.IMREAD_ANYCOLOR,這個值與 cv2.IMREAD_COLOR

      有何區(qū)別呢?

      cv2.IMREAD_COLOR : 設(shè)置該值只會讀取BGR三個通道;

      cv2.IMREAD_ANYCOLOR :設(shè)置該值會按照任何可能的顏色通道讀取;

      如果你一直操作的都是 BGR 通道的圖片,那 ANYCOLOR 永遠(yuǎn)意識不到區(qū)別

      讀取圖片的代碼如下

      番外1. OpenCV 圖像處理之圖片加載與視頻加載

      import cv2 img = cv2.imread('./test_img.jpg') print(type(img))

      以上代碼從Python語言上來看,沒有什么特別難的地方,但是會出現(xiàn)如下錯誤

      本系列專欄既然是為了解決問題而寫,那我們關(guān)注的就是BUG。

      讀取圖片的時候,正常會讀取到一個圖片資源,圖片類型如下所示

      但是,很多時候,會返回一個空值

      該值出現(xiàn)的原因是,你的圖片路徑不對,即沒有讀取到你的目標(biāo)圖片,修改圖片路徑即可解決問題。

      本部分代碼中 './test_img.jpg' 為圖片路徑,專業(yè)術(shù)語叫做硬編碼,實(shí)際開發(fā)過程中,建議采用os、path 模塊實(shí)現(xiàn)對路徑的自動處理。

      還有一種可能性會導(dǎo)致你返回 ,不過該種可能性出現(xiàn)的情況比較少,很多人會忽略,就是圖片所在的文件夾,你沒有權(quán)限進(jìn)行訪問,如果該問題出現(xiàn)了,你需要補(bǔ)充的就是文件權(quán)限相關(guān)的知識。

      cv2.imshow 顯示圖像的使用方法與相關(guān)注意事項(xiàng)

      默認(rèn)使用 cv2.imshow 函數(shù)即可顯示圖像,而且打開的窗口會自適應(yīng)圖片,該函數(shù)也包含兩個參數(shù),其一是窗口名字,注意不要使用中文,其二是圖像。

      這個函數(shù)的實(shí)際應(yīng)用比較簡單,但是有如下問題,需要注意,具體代碼為:

      import cv2 img = cv2.imread('./test_img.jpg') print(type(img)) cv2.imshow('image',img) cv2.imshow('image',img) cv2.waitKey(0)

      測試上述代碼之后,程序運(yùn)行之后只會出現(xiàn)一個窗口,這是因?yàn)槲覀儍纱问褂?cv2.imshow 函數(shù),第一個窗口名稱參數(shù)給了相同的值,如果希望打開兩個窗口,一定要將該參數(shù)設(shè)置為不同值。

      這里還擴(kuò)展出了一個新的函數(shù) cv2.waitKey,如果沒有該函數(shù),窗口將一閃而過。

      該函數(shù)準(zhǔn)確的說是鍵盤綁定的函數(shù),只是這里用了它等待響應(yīng)這一目的。

      cv2.waitKey具備一個參數(shù),含義是時間,注意單位是毫秒,如果期望設(shè)置具體的毫秒數(shù),按照預(yù)期設(shè)置參數(shù)值即可,如果設(shè)置為 0,窗口將無限等待下去,直到關(guān)閉,或者按下特定按鍵。

      在這個地方有一個需要特別注明,并且大家可以擴(kuò)展學(xué)習(xí)的知識點(diǎn)

      一般情況下,我們按照如下設(shè)置進(jìn)行窗口檢測:

      k = cv2.waitKey(0) if k == 27: pass

      以上代碼在 32 位機(jī)器上可以正常運(yùn)行,但是在 64 位機(jī)器,建議按照下述代碼修改:

      k = cv2.waitKey(0) & 0xFF if k == 27: pass

      上述代碼還可以進(jìn)行修改,具體如下:

      import cv2 img = cv2.imread('./test_img.jpg') cv2.startWindowThread() cv2.namedWindow("image_show") cv2.imshow("image_show", img) cv2.waitKey()

      其中新增加了 cv2.startWindowThread函數(shù)與cv2.namedWindow函數(shù)

      以上兩個函數(shù)的含義如下:

      cv2.startWindowThread:新開一個線程用于實(shí)時刷新圖片

      cv2.namedWindow:命名一個窗口,并且讓窗口可調(diào)整

      cv2.namedWindow函數(shù)可以進(jìn)行拆解下:

      默認(rèn)情況下,我們使用 cv2.imshow 打開的窗口是不能調(diào)整窗口比例的,如果希望可以調(diào)整,就必須用到 cv2.namedWidows 函數(shù),畢竟不是所有的電腦都是高分辨率的,例如橡皮擦自己的電腦就很難展示大圖。

      該函數(shù)的原型如下:

      cv.namedWindow(winname, flags=None)

      其中 winname 是窗口名稱,后續(xù) cv2.imshow 在調(diào)用的時候,第一個參數(shù)要與其匹配上,第二個參數(shù)是窗口標(biāo)志。

      WINDOW_NORMAL:顯示圖像后,允許用戶隨意調(diào)整窗口大小;

      WINDOW_AUTOSIZE:根據(jù)圖像大小顯示窗口,不允許用戶調(diào)整大小;

      WINDOW_FREERATIO:窗口大小自適應(yīng)比例;

      WINDOW_KEEPRATIO:保持圖像的比例。

      默認(rèn)值是 WINDOW_AUTOSIZE。

      以上內(nèi)容比較簡單,不做代碼演示。

      cv2.imwrite 寫入圖像的使用方法與相關(guān)注意事項(xiàng)

      使用 cv2.imwrite 函數(shù)可以保存一張圖片,該函數(shù)也具備兩個參數(shù),第一個為圖片名,第二個為待保存的圖片

      該函數(shù)的使用非常簡單:

      import cv2 img = cv2.imread('test_img.jpg') cv2.imwrite('test.jpg',img)

      該函數(shù)還有一個非必填參數(shù),即可選參數(shù),并且它存在不同解釋。

      如果保存的為 JPG 圖片,表示的是圖像的質(zhì)量,用 0~100 的整數(shù)表示;

      如果保存的為 PNG 圖片,表示的是壓縮級別,默認(rèn)為 3

      使用的時候,參照如下代碼即可:

      cv2.imwrite('test.jpg',img, [int(cv2.IMWRITE_JPEG_QUALITY), 95]) cv2.imwrite('test.png',img, [int(cv2.IMWRITE_PNG_COMPRESSION), 4])

      如果使用 cv2.imwrite發(fā)現(xiàn)文件并沒有存儲成功,注意,該問題可能是中文路徑的問題,例如下述代碼:

      import cv2 img = cv2.imread('test_img.jpg') cv2.imwrite('./圖片/test.jpg',img)

      出現(xiàn)該問題之后,建議將中文路徑名進(jìn)行修改,否則只能切換其他圖像保存方法。

      OpenCV 圖像處理 視頻

      版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時內(nèi)刪除侵權(quán)內(nèi)容。

      版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時內(nèi)刪除侵權(quán)內(nèi)容。

      上一篇:excel取整函數(shù)如何使用
      下一篇:文檔頁眉頁腳的刪除辦法
      相關(guān)文章
      亚洲国产成人精品激情| 亚洲成色WWW久久网站| 亚洲乱码日产一区三区| 亚洲av乱码中文一区二区三区| 亚洲国产高清美女在线观看| 亚洲尹人九九大色香蕉网站| 亚洲国产人成在线观看69网站 | 亚洲综合亚洲国产尤物| 日韩精品亚洲人成在线观看| 久久亚洲精品无码| 亚洲产国偷V产偷V自拍色戒| 中文字幕久久亚洲一区| 国产亚洲精aa成人网站| 久久亚洲国产成人影院网站| 国产福利电影一区二区三区,亚洲国模精品一区| 亚洲成熟丰满熟妇高潮XXXXX| 亚洲精品国产精品| 日韩欧美亚洲国产精品字幕久久久| 亚洲国产精品嫩草影院| 亚洲成a人无码亚洲成av无码| 久久精品亚洲日本波多野结衣| 亚洲av无码专区亚洲av不卡| 激情无码亚洲一区二区三区| 色天使色婷婷在线影院亚洲| va亚洲va日韩不卡在线观看| 亚洲人成无码网站久久99热国产| 亚洲色偷拍区另类无码专区| 国产亚洲AV手机在线观看| 亚洲精品无码乱码成人| 亚洲Av无码精品色午夜| 亚洲五月六月丁香激情| 91亚洲国产成人久久精品| 国产精品亚洲午夜一区二区三区| 亚洲欧洲日产国码久在线| 婷婷国产偷v国产偷v亚洲| 亚洲国产综合久久天堂| 国产亚洲精品成人AA片新蒲金| 精品国产亚洲一区二区三区| 亚洲精品高清视频| 亚洲a级在线观看| 亚洲妇女无套内射精|