OpenCV Python教程(1、圖像的載入、顯示和保存)

本文是OpenCV? 2 Computer Vision Application Programming Cookbook讀書筆記的第一篇。在筆記中將以Python語言改寫每章的代碼。

PythonOpenCV的配置這里就不介紹了。

注意,現在OpenCV for Python就是通過NumPy進行綁定的。所以在使用時必須掌握一些NumPy的相關知識!

圖像就是一個矩陣,在OpenCV for Python中,圖像就是NumPy中的數組!

如果讀取圖像首先要導入OpenCV包,方法為:

[python]?view plaincopy
  1. import?cv2??

讀取并顯示圖像

在Python中不需要聲明變量,所以也就不需要C++中的cv::Mat xxxxx了。只需這樣:

[python]?view plaincopy
  1. img?=?cv2.imread("D:\cat.jpg")??

OpenCV目前支持讀取bmp、jpg、png、tiff等常用格式。更詳細的請參考OpenCV的參考文檔。

接著創建一個窗口

[python]?view plaincopy
  1. cv2.namedWindow("Image")??

然后在窗口中顯示圖像

[python]?view plaincopy
  1. cv2.imshow("Image",?img)??

最后還要添上一句:

[python]?view plaincopy
  1. cv2.waitKey?(0)??

如果不添最后一句,在IDLE中執行窗口直接無響應。在命令行中執行的話,則是一閃而過。

完整的程序為:

[python]?view plaincopy
  1. import?cv2???
  2. ??
  3. img?=?cv2.imread("D:\\cat.jpg")???
  4. cv2.namedWindow("Image")???
  5. cv2.imshow("Image",?img)???
  6. cv2.waitKey?(0)??
  7. cv2.destroyAllWindows()??
最后釋放窗口是個好習慣!

創建/復制圖像


新的OpenCV的接口中沒有CreateImage接口。即沒有cv2.CreateImage這樣的函數。如果要創建圖像,需要使用numpy的函數(現在使用OpenCV-Python綁定,numpy是必裝的)。如下:

[python]?view plaincopy
  1. emptyImage?=?np.zeros(img.shape,?np.uint8)??
在新的OpenCV-Python綁定中,圖像使用NumPy數組的屬性來表示圖像的尺寸和通道信息。如果輸出img.shape,將得到(500, 375, 3),這里是以OpenCV自帶的cat.jpg為示例。最后的3表示這是一個RGB圖像。

也可以復制原有的圖像來獲得一副新圖像。

[python]?view plaincopy
  1. emptyImage2?=?img.copy();??
如果不怕麻煩,還可以用cvtColor獲得原圖像的副本。
[python]?view plaincopy
  1. emptyImage3=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)??
  2. #emptyImage3[...]=0??
后面的emptyImage3[...]=0是將其轉成空白的黑色圖像。

保存圖像?

保存圖像很簡單,直接用cv2.imwrite即可。

cv2.imwrite("D:\\cat2.jpg", img)

第一個參數是保存的路徑及文件名,第二個是圖像矩陣。其中,imwrite()有個可選的第三個參數,如下:

cv2.imwrite("D:\\cat2.jpg", img,[int(cv2.IMWRITE_JPEG_QUALITY), 5])

第三個參數針對特定的格式: 對于JPEG,其表示的是圖像的質量,用0-100的整數表示,默認為95。 注意,cv2.IMWRITE_JPEG_QUALITY類型為Long,必須轉換成int。下面是以不同質量存儲的兩幅圖:

對于PNG,第三個參數表示的是壓縮級別。cv2.IMWRITE_PNG_COMPRESSION,從0到9,壓縮級別越高,圖像尺寸越小。默認級別為3:

[python]?view plaincopy
  1. cv2.imwrite("./cat.png",?img,?[int(cv2.IMWRITE_PNG_COMPRESSION),?0])???
  2. cv2.imwrite("./cat2.png",?img,?[int(cv2.IMWRITE_PNG_COMPRESSION),?9])??
保存的圖像尺寸如下:

還有一種支持的圖像,一般不常用。

完整的代碼為:

[python]?view plaincopy
  1. import?cv2??
  2. import?numpy?as?np??
  3. ??
  4. img?=?cv2.imread("./cat.jpg")??
  5. emptyImage?=?np.zeros(img.shape,?np.uint8)??
  6. ??
  7. emptyImage2?=?img.copy()??
  8. ??
  9. emptyImage3=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)??
  10. #emptyImage3[...]=0??
  11. ??
  12. cv2.imshow("EmptyImage",?emptyImage)??
  13. cv2.imshow("Image",?img)??
  14. cv2.imshow("EmptyImage2",?emptyImage2)??
  15. cv2.imshow("EmptyImage3",?emptyImage3)??
  16. cv2.imwrite("./cat2.jpg",?img,?[int(cv2.IMWRITE_JPEG_QUALITY),?5])??
  17. cv2.imwrite("./cat3.jpg",?img,?[int(cv2.IMWRITE_JPEG_QUALITY),?100])??
  18. cv2.imwrite("./cat.png",?img,?[int(cv2.IMWRITE_PNG_COMPRESSION),?0])??
  19. cv2.imwrite("./cat2.png",?img,?[int(cv2.IMWRITE_PNG_COMPRESSION),?9])??
  20. cv2.waitKey?(0)??
  21. cv2.destroyAllWindows()??

參考資料:
《OpenCV References Manuel》
《OpenCV? 2 Computer Vision Application Programming Cookbook》
《OpenCV Computer Vision with Python》

未完待續...

轉載地址:轉載地址:http://blog.csdn.net/sunny2038/article/details/9057415

轉載請詳細注明原作者及出處,謝謝!

轉載于:https://www.cnblogs.com/leytton/p/8253394.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/375768.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/375768.shtml
英文地址,請注明出處:http://en.pswp.cn/news/375768.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

大華出入口管理系統H710服務器配置,DH-DSS-H710S2 大華出入口綜合管理系統 停車場收費 支持人臉相機設備添加...

DH-DSS-H710S2 大華出入口綜合管理系統 支持車輛列表展示,包括車輛編號、車牌、車場、車輛品牌、車輛類型、車身顏色、車主等信息 支持通過人員編號、姓名進行人員信息查詢 支持打印小票與導出繳費信息 DH-DSS-H710S2DH-DSS-H710S2大華出入口綜合管理系統DH-DSS-H71…

微軟塊級備份引擎服務器,文件級與塊級備份區別

首先我們先來了解一下,什么叫做塊級?什么叫文件級?1.塊級概念:塊級是指以扇區為基礎,一個或我連續的扇區組成一個塊,也叫物理塊。它是在文件系統與塊設備(例如:磁盤驅動器)之間。2.文件級概念&a…

通過物理映射往虛擬機中傳輸數據

1、在虛擬機管理界面,找到硬盤,雙擊 2、在跳出的頁面中點擊“映射” 3、在彈出的頁面中將“以只讀模式打開文件”選項勾去 4、選擇是“”是 5、這個時候就看到電腦上出現了一個“Z盤”,此時就可以將需要復制進虛擬機的文件,復制…

Ubuntu12.04版本安裝arm-linux-gcc 4.3.3

由于Ubuntu12.04是64位系統,如果安裝4.3.3版本的arm gcc,系統將會找到,所以要讓其可用,就要安裝ia32-lib包,以便讓系統使用32bit軟件: apt-get install ia32-libs 由于我前面已將安裝好了gcc 4.3.3并且設置好了環境變量,所以安裝完上面以后就可以查看gcc信息了: arm-linux-gcc …

[Algorithm] 字符串匹配算法——KMP算法

1 字符串匹配 字符串匹配是計算機的基本任務之一。 字符串匹配是什么?舉例來說,有一個字符串"BBC ABCDAB ABCDABCDABDE",我想知道,里面是否包含另一個字符串"ABCDABD"? 許多算法可以完成這個任務&…

入門Git

本文是我在[實驗樓]這個平臺學習git時的第一篇學習筆記&#xff0c;現貼出來以饗大家&#xff01; git學習 1、git的配置 git的配置主要通過git config --global <配置名稱> <配置的值>來對git進行配置 其中最常用的配置為&#xff1a; git config --global u…

小程序廣告變現:探索創新路徑實現盈利

隨著移動互聯網的不斷發展&#xff0c;小程序作為一種輕量級應用形式&#xff0c;在用戶中的普及程度不斷提升。對于開發者而言&#xff0c;如何在小程序中實現盈利成為了一項挑戰&#xff0c;而廣告變現成為其中一種常見的經濟模式。本文將深入探討小程序廣告變現的方式以及如…

服務器共享文件審計,內網安全管理系統-共享審計

在現代企事業單位的網絡中&#xff0c;最常用的功能莫過于“共享文件”了。財務部門需要當月員工的考勤信息&#xff0c;人事部門可能不會親自拿過去&#xff0c;而是在網絡上共享&#xff1b;生產部門的生產報表也不會用書面的資料分發&#xff0c;而是放在網絡的共享文件夾下…

介紹“Razor”— ASP.NET的一個新視圖引擎

我的團隊當前正在從事的工作之一就是為ASP.NET添加一個新的視圖引擎。 一直以來&#xff0c;ASP.NET MVC都支持 “視圖引擎”的概念—采用不同語法的模板的可插拔模塊。當前ASP.NET MVC “默認”的視圖引擎是ASP.NET Web窗體使用的.aspx/.ascx/.master文件模板。而當今其他一些…

w10系統打印服務器怎樣出來,win10怎么打開關閉打印機服務教程步驟

當我們想要使用打印機服務時候&#xff0c;卻不知道在哪里打開&#xff0c;對于win10系統&#xff0c;具體怎么操作呢?下面小編來告訴你開啟和關閉打印機服務的方法吧&#xff0c;希望對你有幫助!Win10系統開啟和關閉打印機服務的方法1、在Win10系統下&#xff0c;按住鍵盤的“…

獲取函數的名字

c99標準中的__func__預定義標識符功能可以幫我們獲取函數的名稱 #include<string> #include<iostream> using namespace std;const char *hello(){return __func__; }int main(){cout<<hello()<<endl;return 0; }代碼中的函數相當于&#xff1a; con…

淺談自學方法論- 不斷更新-記錄思路

1. 用程序員的思想&#xff0c;去自學。 從主函數入手&#xff0c;也就是&#xff0c;了解整個框架。 2. 讀書&#xff0c;帶著宏觀和微觀的思路&#xff0c; 先不管看得懂看不懂看第一遍&#xff0c; 然后帶著問題去讀第二遍&#xff0c;并搜索不懂得關鍵詞。 第三遍&#xff…

xp系統目前禁用索引服務器,WinXP系統中可以被禁用的服務對照表

application layer gateway service為internet連接共享和internet連接防火墻提供第三方協議插件的支持如果你沒啟用internet連接共享或windows xp內置防火墻&#xff0c;可以禁止這個服務。automatic updates自動從windows update啟用windows更新的下載和安裝需要時&#xff0c…

hadoop之linux常用命令

Linux的命令后面會有命令選項&#xff0c;有的選項還有選項值。選項的前面有短橫線“-”&#xff0c;命令、選項、選項值之間使用空格隔開。有的命令沒有選項&#xff0c;會有參數。選項是命令內置的功能&#xff0c;參數是用戶提供的符合命令格式的內容。 1.1.1. 命…

c獲取文件的名字和運行到程序的第幾行功能

可以通過__FILE__和__LINE__兩個宏獲取文件的名字和代碼運行的行數 #include<stdio.h> int main(){printf("file:%s line:%d\n",__FILE__,__LINE__);return 0; }__FILE__在linux中能獲取到文件名稱&#xff0c;但是在windows中獲取的是帶路徑的名字。

MongoDB系列二

簡介 MongoDB是一個基于分布式文件存儲的數據庫。由C語言編寫。旨在為WEB應用提供可擴展的高性能數據存儲解決方案。 MongoDB是一個高性能&#xff0c;開源&#xff0c;無模式的文檔型數據庫&#xff0c;是當前NoSql數據庫中比較熱門的一種。 MongoDB是一個介于關系數據庫和非關…

通過查看__cplusplus的值查看編譯器的C++標準

C03標準中&#xff0c;__cplusplus被定義為199711L&#xff0c;而在C11中&#xff0c;__clpusplus則被定義為201103L #include<iostream> using namespace std; int main(){cout<<__cplusplus<<endl;return 0; }

Oracle-數據實現豎排打印

--存放重證評分的數據表create table ZZPFapache2( ZZ_datetime DATE, --時間 ZZ_zongfen INTEGER, --總分 ZZ_shiwanglui INTEGER, --死亡率 ZZ_BINGRENID VARCHAR2(50), --病人ID ZZ_h1f1 INTEGER, --第1行1個分 ZZ_h1m1 VARCHAR2(40), ZZ_h1f2 INTEGER, --第1行…

C#時間格式

可以這樣寫: date.ToString("yyyy年MM月", DateTimeFormatInfo.InvariantInfo) 日期轉化二 DateTime dt DateTime.Now; Label1.Text dt.ToString();//2005-11-5 13:21:25 Label2.Text dt.ToFileTime().ToString();//127756416859912816 Label3.Text dt.ToFileTim…

C++11的靜態斷言

斷言就是將一個返回值總是需要為真的判別式放在語句中&#xff0c;來排除在設計的邏輯上不應該出現的情況。C11標準中引入了靜態斷言&#xff1a;static_assert 在C標準中&#xff0c;<cassert>或assert.h為我們提供了assert宏&#xff0c;但是這個宏只有在運行時才進行…