成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

6個案例手把手教你用Python和OpenCV進行圖像處理

開發 后端
圖像是由若干個像素組成的,因此,圖像處理可以看作計算機對像素的處理。在面向Python的OpenCV中,可以通過位置索引的方式對圖像內的像素進行訪問和處理。

 

01 圖像的讀取、顯示和保存

OpenCV提供了cv2模塊,用于進行圖像的處理操作。

1. 讀取圖像

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

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

其中:

  •  retval是返回值,其值是讀取到的圖像。
  •  filename是要讀取圖像的完整文件名。
  •  flags是讀取標記,用來控制讀取文件的類型。部分常用的標記值如表3-1所示,其中第一列的值與第三列的數值表示的含義一致。

▲表3-1 常用flags標記值

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

代碼如下: 

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

運行代碼會得到lena圖像的像素值,如圖3-3所示。

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

2. 顯示圖像

OpenCV提供了多個與圖像顯示有關的函數,下面簡單介紹常用的幾個。

namedWindow()函數用來創建指定的窗口,一般格式如下: 

  1. None = cv2.namedWindow(window) 

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

  1. cv2.namedWindow("image") 

這句程序會新建一個名字為image的窗口。

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

  1. None = cv2.imshow(window, image) 

其中:

  •  window是窗口的名字。
  •  image是要顯示的圖像。

waitKey()函數用來等待按鍵,當有鍵被按下時,該語句會被執行。其一般格式如下: 

  1. retvalcv2.waitKey([delay]) 

其中:

  •  retval是返回值。
  •  delay表示等待鍵盤觸發的時間,單位是ms。當該值為負數或0時表示無限等待,默認值為0。

destroyAllWindows函數用來釋放所有窗口,其一般格式為: 

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

代碼如下: 

  1. import cv2 as cv               # 導入從cv2模塊  
  2. image = cv.imread("F:/picture/lena.png")     # 讀取lena圖像  
  3. cv.namedWindow("image")     # 創建一個image的窗口  
  4. cv.imshow("image", image)    # 顯示圖像  
  5. cv.waitKey()               # 默認為0,無限等待  
  6. cv.destroyAllWindows()      # 釋放所有窗口 

程序運行結果如圖3-4所示。

▲圖3-4 例3-2的運行結果

3. 保存圖像

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

  1. retvalcv2.imwrite(filename, img[, params]) 

其中:

  •  retval是返回值。
  •  filename是要保存的圖像的完整路徑名,包括文件的擴展名。
  •  img是要保存的圖像的名字。
  •  params是保存的類型參數,可選。
  •  例3-3 編寫程序,將讀取到的圖像保存

代碼如下: 

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

02 圖像通道的基本操作

在圖像處理過程中,有時會根據需要對通道進行拆分與合并。在OpenCV中提供了split()和merge()函數對圖像進行拆分與合并。下面對這兩個函數進行介紹。

1. split()拆分函數

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

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

其中:

  •  b、g、r分別是B通道、G通道、R通道的圖像信息。
  •  img是要拆分的圖像。
  •  例3-4 編寫程序,使用split()函數對圖像進行拆分

代碼如下: 

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

程序運行結果如圖3-5所示。

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

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

2. merge()合并函數

通道合并是通道拆分的逆過程,可以將三個通道的灰度圖像合并為一張彩色圖像。OpenCV中提供了merge()函數來實現圖像通道的合并,其基本格式為: 

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

其中:

  •  imagebgr是合并后的圖像。
  •  b、g、r分別是B通道、G通道、R通道的圖像信息。
  •  例3-5 編寫程序,演示合并圖像的過程

代碼如下: 

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

程序運行結果如圖3-6所示。

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

其中,圖3-6a是原始圖像,圖3-6b是經過拆分后又合并的圖像。

03 圖像屬性的獲取

在進行圖像處理時經常需要獲取圖像的大小、類型等屬性信息。下面介紹幾個常用屬性。

  •  shape:表示圖像的大小。如果是彩色圖像,則返回包含行數、列數和通道數的數組;如果是二值圖像或灰度圖像,則返回包含行數和列數的數組。
  •  size:表示返回的圖像的像素數目。
  •  dtype:表示返回的圖像的數據類型。
  •  例3-6 編寫程序,觀察圖像的屬性值

代碼如下: 

  1. import cv2 as cv  
  2. image = cv.imread("F:/picture/lena.png")  
  3. print("image.shape",image.shape)        # 輸出圖像的大小屬性  
  4. print("image.size",image.size)          # 輸出圖像的像素數目屬性  
  5. print("image.dtype",image.dtype)        # 輸出圖像的類型屬性 

程序運行結果為: 

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

關于作者:高敬鵬,博士學歷,碩士生導師,2002年至今,任職于哈爾濱工程大學信息與通信工程學院。研究方向主要包括人工智能、機器學習、圖像處理、信號檢測、目標識別、現代通信技術與電子系統等。

江志燁,博士學歷,研究員,任職于北京航天長征飛行器研究所。

趙娜,博士學歷,講師,任職于重慶電子工程職業學院。

本文摘編自《機器學習:基于OpenCV和Python的智能圖像處理》,經出版方授權發布。 

 

責任編輯:龐桂玉 來源: 大數據DT
相關推薦

2021-02-06 14:55:05

大數據pandas數據分析

2021-08-09 13:31:25

PythonExcel代碼

2022-10-19 14:30:59

2021-05-17 21:30:06

Python求均值中值

2021-02-10 09:34:40

Python文件的壓縮PyCharm

2021-02-02 13:31:35

Pycharm系統技巧Python

2021-12-11 20:20:19

Python算法線性

2021-05-10 06:48:11

Python騰訊招聘

2020-05-26 10:20:56

Python開發工具

2020-11-08 14:13:31

Python帕累托分析開發

2022-08-04 10:39:23

Jenkins集成CD

2011-03-28 16:14:38

jQuery

2021-02-04 09:00:57

SQLDjango原生

2020-12-17 09:40:01

Matplotlib數據可視化命令

2021-01-27 21:55:13

代碼參數值ECharts

2009-04-22 09:17:19

LINQSQL基礎

2020-05-09 09:59:52

Python數據土星

2020-03-08 22:06:16

Python數據IP

2012-01-11 13:40:35

移動應用云服務

2021-08-02 23:15:20

Pandas數據采集
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 91精品国产乱码久久久久久久久 | 91香蕉视频在线观看 | 国产一区二区三区四区五区加勒比 | 欧美在线一区二区视频 | 亚洲网站在线观看 | 国产观看 | 国产一区二区在线视频 | 成人在线免费观看 | 国产乱码精品一区二区三区五月婷 | 观看av | 国产成人精品综合 | 精品三级在线观看 | 能看的av| 欧美一级特黄aaa大片在线观看 | 欧美成人免费在线视频 | 亚洲精品乱码久久久久久蜜桃91 | 久久久久国产一区二区三区四区 | 国产精品91视频 | 日本a级大片 | 欧美性高潮 | 久久久久久久久久久高潮一区二区 | 青青久久久 | 亚洲不卡视频 | 91麻豆精品一区二区三区 | 国产精品美女久久久久aⅴ国产馆 | 手机看片169 | 日韩和的一区二区 | 欧美日韩成人在线观看 | 中文字幕视频在线观看 | 成人av免费 | 波多野吉衣久久 | 天天操 天天操 | 久久激情五月丁香伊人 | 欧美一区二区三区大片 | 午夜大片 | 久草久草久草 | 亚洲精品久久久久久久久久吃药 | 成人福利电影 | 在线看av网址 | 99这里只有精品视频 | 欧美 日韩 亚洲91麻豆精品 |