Python OpenCV圖像處理與深度學習:Python OpenCV入門-圖像處理基礎

Python OpenCV入門實踐:圖像處理基礎

學習目標

通過本課程,學員們將了解OpenCV的基本概念、安裝方法,掌握如何使用Python和OpenCV進行基本的圖像處理操作,包括圖像的讀取、顯示、保存以及簡單的圖像變換。

相關知識點

  • Python OpenCV圖像處理基礎

學習內容

1 Python OpenCV圖像處理基礎

1.1 OpenCV簡介及其安裝
1.1.1 OpenCV簡介

OpenCV(Open Source Computer Vision Library)是一個開源的計算機視覺和機器學習軟件庫。OpenCV被廣泛應用于各種計算機視覺應用,如圖像和視頻分析、人臉識別、物體識別、醫學圖像分析、增強現實等。它支持多種編程語言,包括Python、C++和Java,以及多種操作系統,如Windows、Linux、MacOS、Android和iOS。

OpenCV的開發始于1999年,由Intel公司發起,旨在加速計算機視覺應用的開發。2000年,OpenCV 1.0版本發布。隨著時間的發展,OpenCV不斷吸收新的算法和技術,成為計算機視覺領域不可或缺的工具之一。OpenCV 2.0版本引入了更多的高級功能,如機器學習模塊。2012年,OpenCV 3.0版本發布,增加了更多的圖像處理和視頻分析功能。最新的OpenCV 4.0版本進一步優化了性能,增加了對深度學習的支持。

1.1.2 OpenCV的安裝

安裝OpenCV非常簡單,特別是使用Python時。可以通過Python的包管理工具pip來安裝OpenCV。打開命令行工具,輸入以下命令:

%pip install opencv-python

如果需要使用OpenCV的額外模塊,如SIFT、SURF等,可以安裝opencv-contrib-python包:

%pip install opencv-contrib-python

安裝完成后,可以在Python腳本中通過import cv2來導入OpenCV庫。

1.2 圖像的基本操作
1.2.1 讀取圖像

執行以下指令獲取測試圖片。

!wget https://model-community-picture.obs.cn-north-4.myhuaweicloud.com/ascend-zone/notebook_datasets/188467642fa811f0b2fdfa163edcddae/example.jpg

在OpenCV中,讀取圖像非常簡單。使用cv2.imread()函數可以讀取圖像文件。該函數接受一個文件路徑作為參數,并返回一個NumPy數組,該數組表示圖像的像素值。

import cv2# 讀取圖像
image = cv2.imread('example.jpg')# 檢查圖像是否成功讀取
if image is None:print("Error: Could not read image.")
else:print("Image successfully read.")
1.2.2 顯示圖像

讀取圖像后,可以使用cv2.imshow()函數來顯示圖像。該函數接受兩個參數:窗口名稱和圖像數組。

import cv2# 讀取圖像
image = cv2.imread('example.jpg')# 顯示圖像
cv2.imshow('Image', image)# 等待用戶按鍵
cv2.waitKey(0)# 關閉所有窗口
cv2.destroyAllWindows()
1.2.3 保存圖像

處理完圖像后,可以使用cv2.imwrite()函數將圖像保存到文件。該函數接受兩個參數:文件路徑和圖像數組。

import cv2# 讀取圖像
image = cv2.imread('example.jpg')# 保存圖像
cv2.imwrite('save.jpg', image)
1.3 圖像變換
1.3.1 圖像灰度化

圖像灰度化是將彩色圖像轉換為灰度圖像的過程。在OpenCV中,可以使用cv2.cvtColor()函數來實現圖像的灰度化。該函數接受兩個參數:輸入圖像和顏色轉換代碼。

import cv2
import matplotlib.pyplot as plt# 讀取圖像
image = cv2.imread('example.jpg')# 轉換為灰度圖像
gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
# 將 BGR 格式轉換為 RGB 格式,以適配 matplotlib 的顯示
gray_image = cv2.cvtColor(gray_image, cv2.COLOR_BGR2RGB)
# 顯示灰度圖像
plt.imshow(gray_image)
plt.axis('off')
plt.show()
1.3.2 圖像縮放

圖像縮放是改變圖像大小的過程。在OpenCV中,可以使用cv2.resize()函數來實現圖像的縮放。該函數接受多個參數,包括輸入圖像、輸出圖像的大小、插值方法等。

import cv2# 讀取圖像
image = cv2.imread('example.jpg')# 縮放圖像
resized_image = cv2.resize(image, (800, 600))
# 將 BGR 格式轉換為 RGB 格式,以適配 matplotlib 的顯示
resized_image = cv2.cvtColor(resized_image, cv2.COLOR_BGR2RGB)
# 顯示縮放后的圖像
plt.imshow(resized_image)
plt.show()
1.3.3 圖像旋轉

圖像旋轉是將圖像繞某個點旋轉一定角度的過程。在OpenCV中,可以使用cv2.getRotationMatrix2D()cv2.warpAffine()函數來實現圖像的旋轉。

import cv2
import numpy as np# 讀取圖像
image = cv2.imread('example.jpg')# 獲取圖像的中心點
height, width = image.shape[:2]
center = (width // 2, height // 2)# 定義旋轉角度和縮放比例
angle = 45
scale = 1.0# 獲取旋轉矩陣
rotation_matrix = cv2.getRotationMatrix2D(center, angle, scale)# 應用旋轉
rotated_image = cv2.warpAffine(image, rotation_matrix, (width, height))
# 將 BGR 格式轉換為 RGB 格式,以適配 matplotlib 的顯示
rotated_image = cv2.cvtColor(rotated_image, cv2.COLOR_BGR2RGB)
# 顯示旋轉后的圖像
plt.imshow(rotated_image)
plt.axis('off')
plt.show()

通過本課程的學習,學員們將掌握OpenCV的基本使用方法,能夠進行圖像的讀取、顯示、保存以及簡單的圖像變換。這些基礎知識將為后續更復雜的圖像處理和計算機視覺任務打下堅實的基礎。

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

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

相關文章

【lua】Lua 入門教程:從環境搭建到基礎編程

Lua 入門教程:從環境搭建到基礎編程 Lua 是一種輕量級、可擴展的腳本語言,廣泛應用于游戲開發(如《魔獸世界》《Roblox》)、嵌入式系統、Web 后端等領域。它語法簡潔、運行高效,非常適合作為編程入門語言或輔助開發工…

MySQL索引事務(未完成)

索引的相關操作1.查看索引show index from 表名;2.創建索引create index 索引名字 on 表名(列名);創建索引,是一個危險操作創建索引的時候,需要針對現有的數據,進行大規模的重新整理如果當前表是一個空表,或者數據不多&#xff0c…

Docker一鍵快速部署壓測工具,高效測試 API 接口性能

以下是對該壓測工具的簡單介紹: 這是一個簡易的在線壓測工具,可以對 API 接口/頁面、websocket服務等進行壓力測試,檢驗服務的并發能力使用 thinkphp ant design pro 構建,壓測能力驅動基于 wrk 、 php 多進程協程實現支持在線授…

前端緩存問題詳解

前端緩存是提升網頁性能和用戶體驗的重要手段,但也常導致資源更新不及時等問題。以下是關于前端緩存的核心知識點和解決方案: 一、緩存類型及工作原理HTTP緩存(最核心) 強緩存:直接從本地讀取,不請求服務器…

webpack升級

一、調研對比維度Webpack 4 狀態Webpack 5 改進與優勢構建速度較慢,增量構建效率低? 引入 持久化緩存(filesystem cache),二次構建速度提升高達 90%Tree Shaking支持基礎 Tree Shaking,需手動配置? 更強的 Tree Shak…

Logstash數據遷移之es-to-kafka.conf詳細配置

在 Logstash 中配置從 Elasticsearch (ES) 讀取數據并輸出到 Kafka 是一個相對高級但強大的用法,通常用于數據遷移、重新索引、或構建新的數據管道。 下面我將詳細解釋配置文件的各個部分和細節。 核心配置文件結構 (es-to-kafka.conf) 一個完整的配置文件主要包含三…

在OracleLinux9.4系統上靜默滾動打補丁安裝Oracle19c

OracleLinux9.4系統 安裝Oracle19c 文章目錄OracleLinux9.4系統 安裝Oracle19c一、安裝準備1、yum安裝預檢查需要的包2、系統資源二、滾動安裝一、安裝準備 1、yum安裝預檢查需要的包 yum install libnsl yum install -y oracle-database-preinstall-19c # 最新的unzip yum i…

Android原生HttpURLConnection上傳圖片方案

創建上傳方法object FormUploader {private val BOUNDARY "Boundary-" System.currentTimeMillis()private const val LINE_FEED "\r\n"Throws(IOException::class)fun uploadImage(url: String, imageFile: File, params: MutableMap<String?, Str…

落葉清掃機器人cad+三維圖+設計說明書

摘 要 城市公共場所、校園等環境中&#xff0c;落葉的清掃一直是一個繁瑣而耗時的任務。傳統的人工清掃方式不僅效率低下&#xff0c;還存在人力浪費和安全隱患等問題。因此&#xff0c;研發一款能夠自主完成落葉清掃任務的機器人成為了當今研究的熱點之一。隨著科技的不斷進…

國別域名的SEO優勢:是否更利于在當地搜索引擎排名?

當你盯著搜索引擎結果頁發呆時&#xff0c;有沒有想過——憑什么那個.jp域名的網站能排在.ca前面&#xff1f;別扯什么內容質量&#xff0c;上周幫客戶優化新加坡市場時&#xff0c;親眼見著兩個內容相似度90%的頁面&#xff0c;.sg域名比.com.au在Google Singapore上高出3個排…

動態配置最佳實踐:Spring Boot 十種落地方式與回滾審計指南(含實操與避坑)

作為一名Spring Boot開發者&#xff0c;正在運維一個高可用微服務系統&#xff1a;業務需求變化頻繁&#xff0c;需要實時調整配置如數據庫連接或日志級別&#xff0c;但每次修改都得重啟應用&#xff0c;造成服務中斷和用戶投訴。這不是小麻煩&#xff0c;而是配置管理的痛點—…

vue社區網格化管理系統(代碼+數據庫+LW)

摘要 隨著城市化進程的加快&#xff0c;社區管理的復雜性逐漸增大&#xff0c;傳統的管理模式已無法滿足現代社區管理的需求。社區網格化管理系統作為一種新的管理模式&#xff0c;通過將社區劃分為多個網格單元&#xff0c;使得管理更加精細化、智能化和高效化。本論文基于Sp…

使用EasyExcel實現Excel單元格保護:自由鎖定表頭和數據行

使用EasyExcel實現Excel單元格保護&#xff1a;鎖定表頭和第二行數據 前言 在日常開發中&#xff0c;我們經常需要導出Excel文件&#xff0c;有時還需要對Excel中的某些單元格進行保護&#xff0c;防止用戶誤修改。本文將介紹如何使用EasyExcel 4.0.3實現鎖定Excel表頭和第二行…

dify docker知識庫topk最大值參數配置

1 問題說明 dify構建RAG知識庫過程中&#xff0c;通過會遇到一些默認配置不能解決的問題。 比如topk&#xff0c;topk默認最大10&#xff0c;對語義模糊的檢索&#xff0c;目標文檔可能沒進前10&#xff0c;出現在10-30區間。 所以&#xff0c;需要調整topk最大值參數。 # T…

SRE命令行兵器譜之一:精通top/htop - 從性能“體檢”到瓶頸“解剖”

SRE命令行兵器譜之一:精通top/htop - 從性能“體檢”到瓶頸“解剖” SRE的“戰場”:真實故障場景 下午三點,監控系統告警:“核心API服務響應時間(P99)飆升至5秒”。用戶已經開始在群里抱怨接口超時。這是一個典型的線上性能問題,每一秒的延遲都在影響用戶體驗和公司收…

一、Git與Gitee常見問題解答

Git與Gitee常見問題解答 Git相關問題 Q1: 什么是Git&#xff1f; A: Git是一個分布式版本控制系統&#xff0c;由Linux之父Linus Torvalds開發。它能夠跟蹤文件的變更歷史&#xff0c;支持多人協作開發&#xff0c;是現代軟件開發中不可或缺的工具。 Q2: Git的三個區域是什么&a…

kubernetes服務質量之QoS類

一、QoS類 Kubernetes的QoS&#xff08;Quality of Service&#xff09;類別允許您指定可用于應用程序的可用資源數量&#xff0c;以便更好地控制應用程序的可用性。它還允許您限制特定應用程序的資源使用率&#xff0c;以幫助保護系統的穩定性和性能。 Kubernetes 創建 Pod 時…

Redis--Lua腳本以及在SpringBoot中的使用

前言、為什么要用 Lua&#xff1f;多步操作合并為一步&#xff0c;保證原子性。減少網絡通信次數。下推邏輯到 Redis&#xff0c;提高性能。一、Redis 使用 Lua 腳本的兩種方式方式一&#xff1a;使用 --eval 執行腳本文件這種方式 需要先寫一個 Lua 文件。&#x1f4cc; 示例&…

基于 C 語言的網絡單詞查詢系統設計與實現(客戶端 + 服務器端)

一、項目概述本文將介紹一個基于 C 語言開發的網絡單詞查詢系統&#xff0c;該系統包含客戶端和服務器端兩部分&#xff0c;支持用戶注冊、登錄、單詞查詢及歷史記錄查詢等功能。系統采用 TCP socket 實現網絡通信&#xff0c;使用 SQLite 數據庫存儲用戶信息、單詞數據及查詢記…

《JAVA EE企業級應用開發》第一課筆記

《JAVA EE企業級應用開發》第一課筆記 文章目錄《JAVA EE企業級應用開發》第一課筆記課程主題&#xff1a;三層架構與SSM框架概述一、核心架構&#xff1a;三層架構 (MVC)1. 表現層 (Presentation Layer)2. 業務邏輯層 (Business Logic Layer)3. 數據持久層 (Data Persistence …