最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

opencv-python圖像讀寫(xiě)模塊示例詳解

 更新時(shí)間:2023年07月06日 08:40:49   作者:寒水浮云  
這篇文章主要介紹了opencv-python圖像讀寫(xiě)模塊,本文結(jié)合示例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下

這個(gè)分類(lèi)記錄自己學(xué)習(xí)opencv的隨筆文檔,方便以后查詢和復(fù)習(xí)。python-opencv環(huán)境配置網(wǎng)上教程很多,此處就不做贅述了,該文檔記錄opencv最基礎(chǔ)的圖像讀寫(xiě)和顯示,以及圖像編碼解碼,工具是jupyter notebook。

1 opencv中,圖像讀取函數(shù)是 imread(filename, flags=None)

參數(shù)說(shuō)明:

filename:讀取圖像的路徑,通常支持jpg、png、bmp、tiff等格式文件。

flags:圖片讀入的模式,模式定義在cv::ImreadModels中,默認(rèn)值為IMREAD_COLOR。還有一個(gè)常用的模式是:IMREAD_GRAYSCALE,對(duì)應(yīng)值為 0,以灰度圖方式讀取圖片。

注意:imread函數(shù)返回一個(gè)BGR形式的圖像對(duì)象,其類(lèi)型為一個(gè)numpy數(shù)組。

2 顯示圖像的函數(shù)是 imshow(window_name, image)

參數(shù)說(shuō)明:window_name是一個(gè)字符串,代表要在其中顯示圖像的窗口的名稱。image是它是要顯示的圖像。

可以用 namedWindow(window_name, flag)來(lái)定義一個(gè)窗口,如果沒(méi)有定義會(huì)根據(jù) imshow 的參數(shù)自動(dòng)生成一個(gè)窗口。已經(jīng)定義的窗口可以用 resizeWindow(window_name,width,height) 來(lái)改變窗口大小。

import cv2  
import numpy as np
img=cv2.imread('C:/Users/86188/Desktop/test/python/cat.jpg',cv2.IMREAD_COLOR)  #讀取圖片<br>
cv2.imshow('showimg',img) #顯示圖片
cv2.waitKey(0)           #等待用戶操作
cv2.destroyWindow('window') #銷(xiāo)毀窗口

3 除了直接用opencv的imshow來(lái)顯示圖片,也可以用matplotlib來(lái)顯示圖片

注意需要在顯示的時(shí)候進(jìn)行圖片通道翻轉(zhuǎn)(直接用::-1,也可以用cvtColor()函數(shù)進(jìn)行顏色通道翻轉(zhuǎn)),否則顯示的圖片顏色會(huì)異常,因?yàn)檎D片的格式是RGB,但是opencv讀取進(jìn)來(lái)的格式是BGR。

用opencv來(lái)顯示圖像通常需要好幾行代碼,可以自己封裝成函數(shù),需要的時(shí)候直接調(diào)用:

4 opencv中圖像的屬性

在OpenCV中,圖像是一個(gè)NumPy數(shù)組,我們可以使用numpy數(shù)組的屬性來(lái)訪問(wèn)圖像屬性:

  • 圖像類(lèi)型- 圖像的數(shù)據(jù)結(jié)構(gòu)。OpenCV中的圖像是numpy.ndarray,我們可以將其訪問(wèn)為type(img)。
  • 圖像形狀- 它是以[H, W, C]格式表示的形狀。其中H,W和C分別是圖像的高度,寬度和通道數(shù) ,我們可以將其訪問(wèn)為img.shape。
  • 圖像大小- 它是圖像中像素的總數(shù)。它也是數(shù)組中元素的總數(shù)。我們可以將其訪問(wèn)為img.size。
  • 數(shù)據(jù)類(lèi)型- 它是圖像數(shù)組元素的dtype。我們可以將其訪問(wèn)為img.dtype。

5 圖片保存 imwrite(filename,img)

參數(shù)說(shuō)明: filename 表示保存的文件名稱,img 是需要保存的圖像對(duì)象。

創(chuàng)建窗口,讀取顯示和保存圖像的實(shí)例如下:

import cv2
#創(chuàng)建窗口
cv2.namedWindow('img',cv2.WINDOW_NORMAL)
cv2.resizeWindow('img',640,480)
#讀取圖片
img = cv2.imread('./cat.jpg')
while True:
    cv2.imshow('img',img)
    key = cv2.waitKey(0)  #該函數(shù)的返回值為ASCII碼,參數(shù)0表示:等待 0 毫秒后,用戶可以通過(guò)按鍵盤(pán)上的任意鍵來(lái)銷(xiāo)毀所有窗口。
    if key == ord('q'): #如果鍵盤(pán)輸入q,退出
        break
    elif key == ord('s'):  #如果鍵盤(pán)輸入s,保存圖片到 當(dāng)前文件夾下, ord()是把輸入的字符轉(zhuǎn)換為對(duì)應(yīng)的ASCII碼。
        cv2.imwrite('./mycat.png',img)
    else:
        print(key)
cv2.destroyAllWindows()  #銷(xiāo)毀當(dāng)前所有窗口

 此外,opencv中也可以進(jìn)行多幅圖像的讀取,函數(shù)是 imreadmulti(filename) 參數(shù)filename是待讀取的圖像文件路徑,返回的結(jié)果是tuple類(lèi)型,包含兩個(gè)值,第一個(gè)為bool類(lèi)型,表示是否讀取成功;第二個(gè)參數(shù)是list類(lèi)型,保存讀取的圖像結(jié)果。多幅圖像保存可以用imwritemulti(filename,img) .參數(shù)filename表示保存的圖像文件名稱,img是圖像數(shù)據(jù)。

6 圖像編碼 imencode(ext,img)

參數(shù)說(shuō)明:ext: 文件擴(kuò)展名,用來(lái)決定輸出格式。img: 待編碼圖像數(shù)據(jù)。

圖像編碼后保存在文件中,這里涉及到文件的讀寫(xiě)操作,Python內(nèi)置了讀寫(xiě)文件的函數(shù) with open語(yǔ)句。常用的讀寫(xiě)操作如下:

with open('filename.txt', 'r') as f:
   content = f.read(f)  #文件的讀操作<br>
with open('data.txt', 'w') as f:
   f.write('hello world')  #文件的寫(xiě)操作

下面將讀取的圖像進(jìn)行編碼,然后保存到txt文件中(編碼后要把數(shù)據(jù)轉(zhuǎn)換為二進(jìn)制)。

import cv2   #圖像編碼為數(shù)據(jù)流,方便網(wǎng)絡(luò)傳輸
import numpy as np
img = cv2.imread('cat.jpg')
ret,img_encode = cv2.imencode(' .jpg',img) #圖像編碼,返回值ret為bool類(lèi)型,img_encode為返回的數(shù)據(jù)流,ndarray格式
print(type(img_encode)) 
bytes_encode = img_encode.tobytes() #把編碼的數(shù)據(jù)類(lèi)型轉(zhuǎn)換為bytes二進(jìn)制
print(type(bytes_encode))
with open("imencode.txt","wb") as f: #以二進(jìn)制格式打開(kāi)一個(gè)文件只用于寫(xiě)入。如果該文件已存在則將其覆蓋。如果該文件不存在,創(chuàng)建新文件。
    f.write(bytes_encode)            # 把數(shù)據(jù)存儲(chǔ)到文本中

執(zhí)行完成后,會(huì)在當(dāng)前路徑下生成imencode.txt文件,其中保存著編碼后的圖像數(shù)據(jù)。但是文本打開(kāi)沒(méi)法正常顯示二進(jìn)制,會(huì)亂碼。

7 圖像解碼 imdecode(buf, flags)

參數(shù)說(shuō)明:buf: bytes類(lèi)型的輸入數(shù)據(jù)流,flags: 解碼標(biāo)志,由ImreadModes定義,常用的有IMREAD_GRAYSCALE, IMREAD_COLOR 。

下面從剛才保存的txt文件中讀取圖像數(shù)據(jù)流,然后將數(shù)據(jù)流解碼為圖像顯示(要把讀取的數(shù)據(jù)流轉(zhuǎn)換為ndarray格式再進(jìn)行解碼)。

import cv2       #圖像解碼
import numpy as np
with open('imencode.txt','rb') as f: #以二進(jìn)制格式打開(kāi)一個(gè)文件用于只讀。文件指針將會(huì)放在文件的開(kāi)頭。這是默認(rèn)模式。
    data_encode = f.read()            #從文件中讀取圖像數(shù)據(jù)
img_array = np.frombuffer(data_encode,dtype=np.uint8)  # 把讀取的數(shù)據(jù)流轉(zhuǎn)換為ndarray(數(shù)組)格式
img_decode = cv2.imdecode(img_array,cv2.IMREAD_COLOR) #圖像解碼
cv2.imshow('img_decode',img_decode)
cv2.waitKey(0)
cv2.destroyAllWindows()

到此這篇關(guān)于opencv-python圖像讀寫(xiě)模塊的文章就介紹到這了,更多相關(guān)opencv-python圖像讀寫(xiě)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • caffe的python接口繪制loss和accuracy曲線

    caffe的python接口繪制loss和accuracy曲線

    這篇文章主要為大家介紹了caffe的python接口繪制loss和accuracy曲線示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-06-06
  • 用matplotlib畫(huà)等高線圖詳解

    用matplotlib畫(huà)等高線圖詳解

    這篇文章主要介紹了用matplotlib畫(huà)等高線圖詳解,具有一定借鑒價(jià)值,需要的朋友可以參考下。
    2017-12-12
  • Python實(shí)現(xiàn)為pdf添加水印功能

    Python實(shí)現(xiàn)為pdf添加水印功能

    這篇文章主要介紹了Python實(shí)現(xiàn)給普通PDF添加水印的方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-04-04
  • 手把手教你打造個(gè)性化全棧應(yīng)用Python?Reflex框架全面攻略

    手把手教你打造個(gè)性化全棧應(yīng)用Python?Reflex框架全面攻略

    Reflex框架是為了解決傳統(tǒng)全棧開(kāi)發(fā)中的一些挑戰(zhàn)而誕生的,它充分利用了現(xiàn)代前端框架(如React)的優(yōu)勢(shì),與后端技術(shù)(如Node.js)深度集成,使得開(kāi)發(fā)者能夠更加流暢地構(gòu)建整個(gè)應(yīng)用,Reflex的設(shè)計(jì)理念包括簡(jiǎn)化、響應(yīng)性和一致性,旨在提高全棧開(kāi)發(fā)的效率和可維護(hù)性
    2023-12-12
  • python 串行執(zhí)行和并行執(zhí)行實(shí)例

    python 串行執(zhí)行和并行執(zhí)行實(shí)例

    這篇文章主要介紹了python 串行執(zhí)行和并行執(zhí)行實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-04-04
  • Python大批量寫(xiě)入數(shù)據(jù)(百萬(wàn)級(jí)別)的方法

    Python大批量寫(xiě)入數(shù)據(jù)(百萬(wàn)級(jí)別)的方法

    這篇文章主要給大家介紹了關(guān)于Python大批量寫(xiě)入數(shù)據(jù)(百萬(wàn)級(jí)別)的相關(guān)資料,在日常處理數(shù)據(jù)的過(guò)程中,我們都有批量寫(xiě)入數(shù)據(jù)的需求,文中給出了詳細(xì)的示例代碼,需要的朋友可以參考下
    2023-07-07
  • python遞歸計(jì)算N!的方法

    python遞歸計(jì)算N!的方法

    這篇文章主要介紹了python遞歸計(jì)算N!的方法,涉及Python遞歸計(jì)算階乘的技巧,非常簡(jiǎn)單實(shí)用,需要的朋友可以參考下
    2015-05-05
  • Python中不同圖表的數(shù)據(jù)可視化的實(shí)現(xiàn)

    Python中不同圖表的數(shù)據(jù)可視化的實(shí)現(xiàn)

    數(shù)據(jù)可視化是以圖形格式呈現(xiàn)數(shù)據(jù)。它通過(guò)以簡(jiǎn)單易懂的格式匯總和呈現(xiàn)大量數(shù)據(jù),幫助人們理解數(shù)據(jù)的重要性,并有助于清晰有效地傳達(dá)信息。本文為大家準(zhǔn)備了Python實(shí)現(xiàn)不同圖表數(shù)據(jù)可視化的代碼,需要的可以參考一下
    2022-08-08
  • Python實(shí)現(xiàn)在tkinter中使用matplotlib繪制圖形的方法示例

    Python實(shí)現(xiàn)在tkinter中使用matplotlib繪制圖形的方法示例

    這篇文章主要介紹了Python實(shí)現(xiàn)在tkinter中使用matplotlib繪制圖形的方法,結(jié)合實(shí)例形式分析了Python使用tkinter與matplotlib進(jìn)行正弦曲線圖形繪制的相關(guān)操作技巧,需要的朋友可以參考下
    2018-01-01
  • pygame實(shí)現(xiàn)俄羅斯方塊游戲(AI篇2)

    pygame實(shí)現(xiàn)俄羅斯方塊游戲(AI篇2)

    這篇文章主要為大家詳細(xì)介紹了pygame實(shí)現(xiàn)俄羅斯方塊游戲AI的第2篇,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-10-10

最新評(píng)論

海门市| 龙岩市| 古丈县| 宜州市| 安义县| 乐东| 松潘县| 龙江县| 康定县| 大石桥市| 罗山县| 彭山县| 黔南| 承德市| 六安市| 湖南省| 洞口县| 平武县| 万盛区| 衡山县| 广安市| 营山县| 开江县| 濮阳市| 宜都市| 青岛市| 宜黄县| 上蔡县| 新乡市| 报价| 澄城县| 信阳市| 昔阳县| 六枝特区| 永修县| 山阴县| 富民县| 济南市| 房山区| 资阳市| 嵊泗县|