溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

怎么用Python和OpenCV進(jìn)行圖像處理

發(fā)布時(shí)間:2021-10-28 17:30:43 來(lái)源:億速云 閱讀:165 作者:iii 欄目:編程語(yǔ)言

這篇文章主要介紹“怎么用Python和OpenCV進(jìn)行圖像處理”,在日常操作中,相信很多人在怎么用Python和OpenCV進(jìn)行圖像處理問(wèn)題上存在疑惑,小編查閱了各式資料,整理出簡(jiǎn)單好用的操作方法,希望對(duì)大家解答”怎么用Python和OpenCV進(jìn)行圖像處理”的疑惑有所幫助!接下來(lái),請(qǐng)跟著小編一起來(lái)學(xué)習(xí)吧!

1. 讀取圖像

OpenCV提供了cv2.imread()函數(shù)用于進(jìn)行圖像的讀取操作。該函數(shù)的基本格式為:

retval = cv2.imread(filename[, flags])

其中:

  •  retval是返回值,其值是讀取到的圖像。

  •  filename是要讀取圖像的完整文件名。

  •  flags是讀取標(biāo)記,用來(lái)控制讀取文件的類型。部分常用的標(biāo)記值如表3-1所示,其中第一列的值與第三列的數(shù)值表示的含義一致。

怎么用Python和OpenCV進(jìn)行圖像處理

▲表3-1 常用flags標(biāo)記值

  •  例3-1 使用cv2.imread()函數(shù)讀取一幅圖像

代碼如下:

import cv2 as cv  image = cv2.imread("F:/picture/lena.png")      # 讀取lena圖像  print(image)

運(yùn)行代碼會(huì)得到lena圖像的像素值,如圖3-3所示。

怎么用Python和OpenCV進(jìn)行圖像處理

▲圖3-3 lena圖像部分像素值

2. 顯示圖像

OpenCV提供了多個(gè)與圖像顯示有關(guān)的函數(shù),下面簡(jiǎn)單介紹常用的幾個(gè)。

namedWindow()函數(shù)用來(lái)創(chuàng)建指定的窗口,一般格式如下:

None = cv2.namedWindow(window)

其中,window是窗口的名字。例如:

cv2.namedWindow("image")

這句程序會(huì)新建一個(gè)名字為image的窗口。

imshow()函數(shù)用來(lái)顯示圖像,其一般格式如下:

None = cv2.imshow(window, image)

其中:

  •  window是窗口的名字。

  •  image是要顯示的圖像。

waitKey()函數(shù)用來(lái)等待按鍵,當(dāng)有鍵被按下時(shí),該語(yǔ)句會(huì)被執(zhí)行。其一般格式如下:

retval= cv2.waitKey([delay])

其中:

  •  retval是返回值。

  •  delay表示等待鍵盤觸發(fā)的時(shí)間,單位是ms。當(dāng)該值為負(fù)數(shù)或0時(shí)表示無(wú)限等待,默認(rèn)值為0。

destroyAllWindows函數(shù)用來(lái)釋放所有窗口,其一般格式為:

None = cv2. destroyAllWindows ()
  •  例3-2 顯示讀取的圖像

代碼如下:

import cv2 as cv               # 導(dǎo)入從cv2模塊  image = cv.imread("F:/picture/lena.png")     # 讀取lena圖像  cv.namedWindow("image")     # 創(chuàng)建一個(gè)image的窗口  cv.imshow("image", image)    # 顯示圖像  cv.waitKey()               # 默認(rèn)為0,無(wú)限等待  cv.destroyAllWindows()      # 釋放所有窗口

程序運(yùn)行結(jié)果如圖3-4所示。

怎么用Python和OpenCV進(jìn)行圖像處理

▲圖3-4 例3-2的運(yùn)行結(jié)果

3. 保存圖像

OpenCV中提供了cv2.imwrite()函數(shù)來(lái)保存圖像,其一般格式為:

retval= cv2.imwrite(filename, img[, params])

其中:

  •  retval是返回值。

  •  filename是要保存的圖像的完整路徑名,包括文件的擴(kuò)展名。

  •  img是要保存的圖像的名字。

  •  params是保存的類型參數(shù),可選。

  •  例3-3 編寫程序,將讀取到的圖像保存

代碼如下:

import cv2 as cv               # 導(dǎo)入從cv2模塊  image = cv.imread("F:/picture/lena.png")     # 讀取lena圖像  cv.imwrite("F:/picture/lenaresult.png",image) #將圖像保存到F:/picture/下,名字為lenaresult

02 圖像通道的基本操作

在圖像處理過(guò)程中,有時(shí)會(huì)根據(jù)需要對(duì)通道進(jìn)行拆分與合并。在OpenCV中提供了split()和merge()函數(shù)對(duì)圖像進(jìn)行拆分與合并。下面對(duì)這兩個(gè)函數(shù)進(jìn)行介紹。

1. split()拆分函數(shù)

函數(shù)split()可以拆分圖像的通道,例如BGR圖像的三個(gè)通道。其一般格式如下:

b,g,r = cv2.split(img)

其中:

  •  b、g、r分別是B通道、G通道、R通道的圖像信息。

  •  img是要拆分的圖像。

  •  例3-4 編寫程序,使用split()函數(shù)對(duì)圖像進(jìn)行拆分

代碼如下:

import cv2 as cv  image = cv.imread("F:/picture/lena.png")  b,g,r = cv.split(image)          # 拆分圖像通道分為b,g,r三個(gè)通道  cv.imshow("b",b)             # 顯示b通道的圖像信息  cv.imshow("g",g)    # 顯示g通道的圖像信息  cv.imshow("r",r)    # 顯示r通道的圖像信息  cv.imshow("image", image)  cv.waitKey()  cv.destroyAllWindows()

程序運(yùn)行結(jié)果如圖3-5所示。

怎么用Python和OpenCV進(jìn)行圖像處理

▲圖3-5 例3-4的運(yùn)行結(jié)果:a)原始圖像,b)B通道圖像,c)G通道圖像,d)R通道圖像

其中,圖3-5a是原圖,圖3-5b是B通道的圖像,圖3-5c是G通道的圖像,圖3-5d是R通道的圖像。

2. merge()合并函數(shù)

通道合并是通道拆分的逆過(guò)程,可以將三個(gè)通道的灰度圖像合并為一張彩色圖像。OpenCV中提供了merge()函數(shù)來(lái)實(shí)現(xiàn)圖像通道的合并,其基本格式為:

imagebgr = cv2.merge([b,g,r])

其中:

  •  imagebgr是合并后的圖像。

  •  b、g、r分別是B通道、G通道、R通道的圖像信息。

  •  例3-5 編寫程序,演示合并圖像的過(guò)程

代碼如下:

import cv2 as cv  image = cv.imread("F:/picture/lena.png")  b,g,r = cv.split(image)          # 拆分圖像通道分為b,g,r三個(gè)通道  imagebgr = cv.merge([b,g,r])    # 將b,g,r三個(gè)通道的圖像合并  cv.imshow("image", image)  cv.imshow("imagegbgr", imagebgr)  cv.waitKey() cv.destroyAllWindows()

程序運(yùn)行結(jié)果如圖3-6所示。

怎么用Python和OpenCV進(jìn)行圖像處理

▲圖3-6 例3-5的運(yùn)行結(jié)果:a)原始圖像 b)拆分并合并后的圖像

其中,圖3-6a是原始圖像,圖3-6b是經(jīng)過(guò)拆分后又合并的圖像。

03 圖像屬性的獲取

在進(jìn)行圖像處理時(shí)經(jīng)常需要獲取圖像的大小、類型等屬性信息。下面介紹幾個(gè)常用屬性。

  •  shape:表示圖像的大小。如果是彩色圖像,則返回包含行數(shù)、列數(shù)和通道數(shù)的數(shù)組;如果是二值圖像或灰度圖像,則返回包含行數(shù)和列數(shù)的數(shù)組。

  •  size:表示返回的圖像的像素?cái)?shù)目。

  •  dtype:表示返回的圖像的數(shù)據(jù)類型。

  •  例3-6 編寫程序,觀察圖像的屬性值

代碼如下:

import cv2 as cv  image = cv.imread("F:/picture/lena.png")  print("image.shape",image.shape)        # 輸出圖像的大小屬性  print("image.size",image.size)          # 輸出圖像的像素?cái)?shù)目屬性  print("image.dtype",image.dtype)        # 輸出圖像的類型屬性

程序運(yùn)行結(jié)果為:

image.shape (512, 512, 3)  image.size 786432  image.dtype uint8

到此,關(guān)于“怎么用Python和OpenCV進(jìn)行圖像處理”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實(shí)踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識(shí),請(qǐng)繼續(xù)關(guān)注億速云網(wǎng)站,小編會(huì)繼續(xù)努力為大家?guī)?lái)更多實(shí)用的文章!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI