Python + OpenCV 開啟圖片、寫入儲存圖片

這篇教學會介紹OpenCV 里imread()、imshow()、waitKey() 方法,透過這些方法,在電腦中使用不同的色彩模式開啟圖片并顯示圖片。

imread() 開啟圖片

使用imread() 方法,可以開啟圖片,imread() 有兩個參數,第一個參數為檔案的路徑和名稱,第二個參數可不填,表示以何種模式( mode ) 開啟圖片,開啟的圖片支援常見的jpg、png...等格式,下面是最基本開啟圖片的程式碼。

import cv2
img = cv2.imread('meme.jpg')   # 開啟圖片,預設使用 cv2.IMREAD_COLOR 模式
cv2.imshow('oxxostudio', img)  # 使用名為 oxxostudio 的視窗開啟圖片
cv2.waitKey(0)                 # 按下任意鍵停止
cv2.destroyAllWindows()        # 結束所有圖片視窗

如果設定第二個參數,就能使用不同的色彩模式開啟圖片,下面的程式碼執行后,會以灰階模式開啟圖片。

import cv2
img = cv2.imread('meme.jpg', cv2.IMREAD_GRAYSCALE)  # 使用 cv2.IMREAD_GRAYSCALE 模式
# img = cv2.imread('meme.jpg', 2) # 也可使用數字代表模式
cv2.imshow('oxxostudio', img)
cv2.waitKey(0)
cv2.destroyAllWindows()

imshow() 顯示圖片

在上面的程式碼中,使用了imshow() 的方法顯示圖片,imshow() 包含兩個參數,第一個參數為字串,表示要開啟圖片的視窗名稱,第二個參數為使用imread()讀取的圖片

waitKey() 等待多久關閉

使用imshow() 方法時會搭配waitKey(),waitKey() 表示等待與讀取使用者按下的按鍵,包含一個單位為「毫秒」的參數,如果設定0 表示持續等待至使用者按下按鍵為止,下方的程式碼設定waitKey 的參數為2000,表示兩秒后會關閉圖片視窗( 兩秒內如果按下q 就會中止計時并關閉視窗)。

如果遇到視窗無法關閉的狀況,可以使用destroyAllWindows() 的方法關閉所有視窗,或使用destroyWindow(name) 關閉指定名稱的視窗。

import cv2
img = cv2.imread('meme.jpg', cv2.IMREAD_GRAYSCALE)  # 使用 cv2.IMREAD_GRAYSCALE 模式
cv2.imshow('oxxostudio', img)
cv2.waitKey(2000)       # 等待兩秒 ( 2000 毫秒 ) 后關閉圖片視窗
cv2.destroyAllWindows()

色彩模式數字對照表

寫入并儲存圖片

這篇教學會介紹OpenCV 里的imwrite() 方法,實現將圖片另存新檔( 也可轉檔) 的功能。

imwrite() 寫入并儲存圖片

使用imwrite() 方法,可以將處理好的資料內容寫入并儲存為圖片,imwrite() 有三個參數,第一個參數為檔案的路徑和名稱,第二個參數為要寫入的資料內容,第三個參數為圖片壓縮品質的設定

下方的程式碼執行后,會先用「灰階模式」開啟一張圖片,然后再將其存檔為壓縮品質80 的jpg 和套用預設值的png 圖檔。

import cv2
img = cv2.imread('meme.jpg', cv2.IMREAD_GRAYSCALE)   # 以灰階模式開啟圖片
cv2.imwrite('oxxostudio_2.jpg', img, [cv2.IMWRITE_JPEG_QUALITY, 80])  # 存成 jpg
cv2.imwrite('oxxostudio_3.png', img)  # 存成 png

儲存陣列產生的圖片

在Python 里,圖片可以使用「三維陣列」的方式表現(長寬各多少個像素、每個像素里包含的顏色資訊是什么),因此如果提供特定格式的三維陣列的資料,就能讓OpenCV 畫出圖形。

下面的范例使用numpy 函式庫,快速產生500x500,每個項目為[0,0,0] 的三維陣列,接著再讓陣列中間的正方形區域的項目設定為[0,0,255],呈現的就是一張500x500 大小,黑色背景,中間200x200 紅色正方形的圖形,最后使用imwrite() 的方法,就能儲存這張圖片。

注意!OpenCV 里的顏色為「BGR」,并非RGB,顏色色碼為0~255

import cv2
import numpy as np
img = np.zeros((500,500,3), dtype='uint8')   # 快速產生 500x500,每個項目為 [0,0,0] 的三維陣列
img[150:350, 150:350] = [0,0,255]  # 將中間 200x200 的每個項目內容,改為 [0,0,255]
cv2.imwrite('oxxostudio.jpg', img)       # 存成 jpg
cv2.imshow('oxxostudio', img)            # 顯示圖片
cv2.waitKey(0)                           # 按下任意鍵停止
cv2.destroyAllWindows()

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

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

相關文章

Google Play上架:惡意軟件、移動垃圾軟件和行為透明度詳細解析和解決辦法 (一)

近期整理了許多開發者的拒審郵件和內容,也發現了許多問題,今天來說一下關于惡意軟件這類拒審的問題。 目標郵件如下: 首先說一下各位小伙伴留言私信的一個方法,提供你的拒審郵件和時間,盡可能的詳細,這樣會幫助我們的團隊了解你們的問題,去幫助小伙伴么解決問題。由于前…

在 .NET 8 Web API 中實現彈性

在現代 Web 開發中,構建彈性 API 對于確保可靠性和性能至關重要。本文將指導您使用 Microsoft.Extensions.Http.Resilience 庫在 .NET 8 Web API 中實現彈性。我們將介紹如何設置重試策略和超時,以使您的 API 更能抵御瞬時故障。 步驟 1.創建一個新的 .…

集成學習(一)Bagging

前邊學習了:十大集成學習模型(簡單版)-CSDN博客 Bagging又稱為“裝袋法”,它是所有集成學習方法當中最為著名、最為簡單、也最為有效的操作之一。 在Bagging集成當中,我們并行建立多個弱評估器(通常是決策…

排序——數據結構與算法 總結8

目錄 8.1 排序相關概念 8.2 插入排序 8.2.1 直接插入排序: 8.2.2 折半插入排序: 8.2.3 希爾排序: 8.3 交換排序 8.3.1 冒泡排序: 8.3.2 快速排序: 8.4 選擇排序 8.4.1 簡單選擇排序 8.4.2 堆排序 8.5 歸并…

磁盤就是一個超大的Byte數組,操作系統是如何管理的?

磁盤在操作系統的維度看,就是一個“超大的Byte數組”。 那么操作系統是如何對這塊“超大的Byte數組”做管理的呢? 我們知道在邏輯上,上帝說是用“文件”的概念來進行管理的。于是,便有了“文件系統”。那么,文件系統…

當前國內可用的docker加速器搜集 —— 筑夢之路

可用鏡像加速器 以下地址搜集自網絡,僅供參考,請自行驗證。 1、https://docker.m.daocloud.io2、https://dockerpull.com3、https://atomhub.openatom.cn4、https://docker.1panel.live5、https://dockerhub.jobcher.com6、https://hub.rat.dev7、http…

最新版情侶飛行棋dofm,已解鎖高階私密模式,單身狗務必繞道!(附深夜學習資源)

今天阿星要跟大家聊一款讓阿星這個大老爺們兒面紅耳赤的神奇游戲——情侶飛行棋。它的神奇之處就在于專為情侶設計,能讓情侶之間感情迅速升溫,但單身狗們請自覺繞道,不然后果自負哦! 打開游戲,界面清新,操…

HTML5使用<progress>進度條、<meter>刻度條

1、<progress>進度條 定義進度信息使用的是 progress 標簽。它表示一個任務的完成進度&#xff0c;這個進度可以是不確定的&#xff0c;只是表示進度正在進行&#xff0c;但是不清楚還有多少工作量沒有完成&#xff0c;也可以用0到某個最大數字&#xff08;如&#xff1…

vs2022安裝qt vs tool

1 緣由 由于工作的需要&#xff0c;要在vs2022上安裝qt插件進行開發。依次安裝qt&#xff0c;vs2022&#xff0c;在vs2022的擴展管理中安裝qt vs tool。 2 遇到困難 問題來了&#xff0c;在qt vs tool的設置qt version中出現問題&#xff0c;設置msvc_64-bit時出現提示“invali…

西安石油大學 課程習題信息管理系統(數據庫課設)

主要技術棧 Java Mysql SpringBoot Tomcat HTML CSS JavaScript 該課設必備環境配置教程&#xff1a;&#xff08;參考給出的鏈接和給出的關鍵鏈接&#xff09; JAVA課設必備環境配置 教程 JDK Tomcat配置 IDEA開發環境配置 項目部署參考視頻 若依框架 鏈接數據庫格式注…

【中項第三版】系統集成項目管理工程師 | 第 4 章 信息系統架構① | 4.1-4.2

前言 第4章對應的內容選擇題和案例分析都會進行考查&#xff0c;這一章節屬于技術相關的內容&#xff0c;學習要以教材為準。本章分值預計在4-5分。 目錄 4.1 架構基礎 4.1.1 指導思想 4.1.2 設計原則 4.1.3 建設目標 4.1.4 總體框架 4.2 系統架構 4.2.1 架構定義 4.…

Invoice OCR

Invoice OCR 發票識別 其他類型ORC&#xff1a; DIPS_YTPC OCR-CSDN博客

25款404網頁源碼(上)

25款404網頁源碼&#xff08;上&#xff09; 1部分源碼 2部分源碼 3部分源碼 4部分源碼 5部分源碼 6部分源碼 7部分源碼 8部分源碼 9部分源碼 10部分源碼 11部分源碼 12部分源碼 領取完整源碼下期更新 1 部分源碼 <!DOCTYPE html> <html><!-- 優選源碼 gulang.…

數據結構基礎--------【二叉樹基礎】

二叉樹基礎 二叉樹是一種常見的數據結構&#xff0c;由節點組成&#xff0c;每個節點最多有兩個子節點&#xff0c;左子節點和右子節點。二叉樹可以用來表示許多實際問題&#xff0c;如計算機程序中的表達式、組織結構等。以下是一些二叉樹的概念&#xff1a; 二叉樹的深度&a…

Element-UI - el-table中自定義圖片懸浮彈框 - 位置優化

該篇為前一篇“Element-UI - 解決el-table中圖片懸浮被遮擋問題”的優化升級部分&#xff0c;解決當圖片位于頁面底部時&#xff0c;顯示不全問題優化。 Vue.directive鉤子函數已在上一篇中詳細介紹&#xff0c;不清楚的朋友可以翻看上一篇&#xff0c; “Element-UI - 解決el-…

深入刨析Redis存儲技術設計藝術(二)

三、Redis主存儲 3.1、存儲相關結構體 redisServer:服務器 server.h struct redisServer { /* General */ pid_t pid; /* Main process pid. */ pthread_t main_thread_id; /* Main thread id */ char *configfile; /* Absolut…

Interpretability 與 Explainability 機器學習

「AI秘籍」系列課程&#xff1a; 人工智能應用數學基礎人工智能Python基礎人工智能基礎核心知識人工智能BI核心知識人工智能CV核心知識 Interpretability 模型和 Explainability 模型之間的區別以及為什么它可能不那么重要 當你第一次深入可解釋機器學習領域時&#xff0c;你會…

Zabbix配置文件中Server和ServerActive參數講解

目錄 參數總結 實例&#xff1a; Zabbix Server 配置 (zabbix_server.conf) Zabbix Agent 配置 (zabbix_agentd.conf) 配置文件解析 實際應用 Zabbix Server 配置文件 (zabbix_server.conf) 對代理端的影響 1. Server 參數 2. ServerActive 參數 Zabbix Agent 配置文…

ubuntu 22 安裝 lua 環境 編譯lua cjson 模塊

在 windows 下使用 cygwin 編譯 lua 和 cjson 簡直就是災難&#xff0c;最后還是到 ubuntu 下完成了。 1、下載lua源碼&#xff08;我下載的 5.1 版本&#xff0c;后面還有一個小插曲), 直接解壓編譯&#xff0c;遇到一個 readline.h not found 的問題&#xff0c;需要安裝 re…

python使用langchain整合通義千文

首先pip安裝langchain和dashscope pip install langchain pip install langchain_community pip install dashscope --upgrade然后測試一下運行效果 from langchain_community.chat_models.tongyi import ChatTongyi from langchain.schema import HumanMessage #api_key可以…