OpenCV入門:圖像處理基礎教程

OpenCV簡介

OpenCV(Open Source Computer Vision Library)是一個開源的計算機視覺和機器學習庫。它包含超過2500種優化算法,涵蓋圖像處理、物體識別、人臉檢測、3D重建、視頻分析等任務。

核心功能

  • 圖像處理:濾波、邊緣檢測、幾何變換。
  • 視頻分析:運動估計、背景減除。
  • 物體檢測:人臉、行人、文本等。
  • 相機標定:3D重建、AR應用。
  • 機器學習:SVM、KNN、神經網絡等集成。

下載與安裝

Python環境安裝

通過pip直接安裝:

pip install opencv-python  # 僅核心模塊
pip install opencv-contrib-python  # 包含額外模塊

資源推薦

  • 官方文檔:docs.opencv.org
  • GitHub倉庫:github.com/opencv/opencv
  • 教程:OpenCV官方提供的Python和C++示例代碼。

基礎功能

1 讀取圖片

import cv2
import numpy as np
a=cv2.imread('test.png')
cv2.imshow('tu',a)
print(a.shape)
print(a.size)
print(a.dtype)
b=cv2.waitKey(0)
# cv2.destroyAllWindows()

這里線導入了opencv的庫CV2,讀取了一張圖片,這里我們讀取后的數據為(*,*,3),因為默認讀取的是RGB三個通道的。然后cv2.show()可以展示圖片,cv2.waitKey(0)表示停留時間,如果參數為0,表示一直停留,如果是其他表示停留n毫秒。cv2.destroyAllWindows()表示關閉所有界面

2 轉化灰度圖和保存

import cv2
import numpy as np
# a=cv2.imread('test.png',cv2.IMREAD_GRAYSCALE)
# a=cv2.imread('test.png',0)#等效
a=cv2.imread('test.png')
a=cv2.cvtColor(a,cv2.COLOR_BGR2GRAY)
cv2.imshow('tu',a)
cv2.waitKey(0)
cv2.destroyAllWindows()
#圖片保存
cv2.imwrite('test0.jpg',a)

這里采用了三種方法來轉化灰度圖,前兩種都是在讀取的同時就轉化為灰度圖了,第一種用cv2.IMREAD_GRAYSCALE來直接轉換,其實吧這個替換為0也是同樣效果。還有一種是用cv2.cvtColor(a,cv2.COLOR_BGR2GRAY)來轉的。最后可以用cv2.imwrite('test0.jpg',a)來保存。

3 摳圖

#摳圖
import cv2
import numpy as np
a=cv2.imread('test.png')#等效b=a[100:300,280:500]
cv2.imshow('b',b)
cv2.imshow('tu',a)
cv2.waitKey(0)
#圖片保存
cv2.imwrite('test0.jpg',a)

這里就像數組一樣,可以進行切片。然后選取我們要選中的區域

我們可以這樣理解圖片,圖片是由一個一個像素組成的,cv2庫把像素點量化了(0-255)。通過cv2,我們可以把一組數組轉化為圖片,也可以把圖片轉化為數組。所有我們可以選中一塊區域來轉化為圖片。

4 讀取視頻

#讀取視頻
import cv2
import numpy as np
video=cv2.VideoCapture('test.mp4')
# video=cv2.VideoCapture(0)         #0表示打開攝像頭
if not video.isOpened():            #判斷是否打開print("視頻打開失敗")
while True:ret,frame=video.read()              #ret表示是否讀取到下一幀,用于終止畫面的if not ret:break# frame=cv2.cvtColor(frame,cv2.COLOR_BGR2GRAY)    #把圖像轉化為黑白的cv2.imshow('frame',frame)if cv2.waitKey(30)  == 27:          #27為esc的ASCII碼,只有esc才能退出breakvideo.release()
cv2.destroyAllWindows()

我們用cv2.VideoCapture('test.mp4')來讀取一個視頻,然后判斷是否打開了(防止意外發生),然后如果打開了就進入一個循環,就是讀取視頻的每一幀,然后如果存在這里ret就為True:幀讀取成功,可繼續處理,否則就停止了。然后對這一幀進行展示,然后下面cv2.waitKey()中填參數來控制速度越大就會播放的速度。最后要對視頻資源進行釋放,否則如果視頻資源太多會卡頓。

5 提取RGB通道

提取RGB通道
import cv2
import numpy as np
a=cv2.imread('test.png')#等效
a1=a[:,:,0]
a2=a[:,:,1]
a3=a[:,:,2]
cv2.imshow('Red Channel (Grayscale)', a2)
cv2.waitKey(0)b,g,r=cv2.split(a)
cv2.imshow('a',a)
cv2.imshow('g',g)
cv2.imshow('b',b)
cv2.imshow('r',r)
cv2.waitKey(0)a_new=a.copy()
a_new[:,:,0]=0
a_new[:,:,1]=0
# a_new[:,:,2]=0
cv2.imshow('Red',a_new)
cv2.waitKey(0)b,g,r=cv2.split(a)
cv2.imshow('a',a)cv2.imshow('g',g)
cv2.imshow('b',b)
cv2.imshow('r',r)n=cv2.merge([b,g,r])
cv2.imshow('new',n)
cv2.waitKey(0)

上面提供了三種提供RGB的方式,但是如果我們展示單通道的時候會自動轉化為灰白的圖片,只有當我們將其與兩種設為0,這樣才會展現出。(RGB順序和RGB不一樣,他是以BGR順序存在的)

?6 圖片打碼

import cv2
import numpy as np
a=cv2.imread('test.png')#等效
a[100:300,280:500]=np.random.randint(0,255,(200,220,3))
cv2.imshow('a',a)
cv2.waitKey(0)

還是和上面說的一樣,圖片由像素表示,像素由數字控制大小,如果我們把指定區域的數字取隨機數,那么這塊就相當于打碼了

7?圖片組合

import cv2
import numpy as np
a=cv2.imread('test.png')#等效
b=cv2.imread('img.png')
a[100:300,280:500]=b[100:300,200:420]
cv2.imshow('a',a)
cv2.waitKey(0)

這個就是把像素的一塊,替換為另一張圖片的一塊,和上面圖片打碼的核心是差不多的。值得注意的是,這里兩張圖片取的大小要對應。

8 圖片縮放

import cv2
import numpy as np
a=cv2.imread('test.png')#等效
cv2.imshow('a',a)
# b=cv2.resize(a,(300,300))
b=cv2.resize(a,dsize=None,fx=1.5,fy=1.5)
cv2.imshow('b',b)
cv2.waitKey(0)

這里由兩種方法,雖然都是用resize,但一個 是直接給出你要放大或縮小到多少像素大小,另一種是要橫向x和縱向y要放大或縮小多少倍

總結? ? ? ??

????????OpenCV是一個開源的計算機視覺庫,提供2500多種優化算法,支持圖像處理、視頻分析、物體檢測等任務。摘要介紹了OpenCV的基礎功能:1)讀取和顯示圖片;2)灰度圖轉換與保存;3)圖像區域裁剪;4)視頻讀取與處理;5)RGB通道分離與合并;6)圖像打碼處理;7)圖像組合;8)圖像縮放。這些功能展示了OpenCV如何通過像素級操作實現基礎圖像處理,為更復雜的計算機視覺應用奠定基礎。

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

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

相關文章

影響內容傳播速度的因素有哪些?

內容的傳播速度是我們在衡量營銷效果時的重要指標。傳播速度越快,越能幫助品牌迅速覆蓋目標受眾,在短時間內提升影響力。影響內容傳播速度的方式來自多個方面,下面就讓我們一同來了解下這其中的因素。一、觀點價值觀點是否具有價值&#xff0…

css動態樣式

使用scss通過變量設置css動態樣式<template><div><!-- 方式一 --><p v-for"(item, index) in dataList" :key"index" :style"{--color: item.color}" >{{item.name}}</p><!-- 方式二 --><p v-for"(…

開源流媒體服務器ZLMediaKit 的Java Api實現的Java版ZLMediaKit流媒體服務器-二開視頻對話

安全性&#xff1a;使用了WSS&#xff08;WebSocket Secure&#xff09;協議確保通信安全 兼容性&#xff1a;支持現代瀏覽器的WebRTC功能 信令機制&#xff1a;通過WebSocket進行信令交換&#xff0c;確保連接建立 媒體傳輸&#xff1a;使用STUN服務器進行NAT穿透&#xff0c;…

mariadb10.3.35備份腳本

一、創建備份用戶[(none)]> create user buserlocalhost identified by tmrQ;[(none)]> GRANT RELOAD, PROCESS, LOCK TABLES, REPLICATION CLIENT ON *.* TO buserlocalhost;[(none)]> flush privileges;二、腳本# cat mysql_bask.sh #!/bin/bash # MariaDB 10.3.35…

W3D引擎游戲開發----從入門到精通【22】

配置完成基本DT物體項后&#xff0c;在這個DT物體項中開始添加這個玩家的動畫信息&#xff0c;如下所示。UseAnim設置是否使用動畫功能&#xff0c;這里開啟。AnimTypeN設置總共的動畫類型數&#xff0c;當前只有一個待機動畫&#xff0c;因此設置為1。AnimType1FrameN設置1號動…

在我國申請注冊的商標在國外可以用不!

近日一個網友找到普推知產商標老楊&#xff0c;問在我國申請注冊商標在新加坡和歐盟可以用不&#xff0c;當然用不成&#xff0c;根據商標法的地域性原則&#xff0c;商標權保護限于注冊地&#xff0c;馳名商標享有部分跨國保護&#xff0c;但是這個要有所在國相關法律證據。如…

在開發板上畫出一個2048棋盤的矩陣

#include “head.h"int* p lcd NULL; //顯示屏內存映射的起始地址int g lcd width; //LCD顯示屏的寬度int g lcd high ; //LCD顯示屏的高度int g lcd bpp; //每個像素點所占的比特位//int x:屏的X軸&#xff08;寬度、列&#xff09;坐標//int y:屏幕y軸&#xff08;高度、…

開源軟件與文化:從嬉皮士精神到數字時代的協同創新

開源軟件與文化&#xff1a;從嬉皮士精神到數字時代的協同創新 本文章由筆者使用提示詞驅動AI創作&#xff0c;并進行審閱。 文章目錄開源軟件與文化&#xff1a;從嬉皮士精神到數字時代的協同創新一、引言&#xff1a;開源的文化基因與技術革命二、開源軟件的文化根源&#x…

sigfillset 函數詳解

sigfillset 函數詳解 一、函數概念 sigfillset() 是 POSIX 信號處理中的核心函數&#xff0c;用于初始化并填充一個信號集&#xff0c;使其包含當前系統支持的所有信號。它是操作信號屏蔽字&#xff08;signal mask&#xff09;的基礎工具&#xff0c;常與 sigprocmask()、sigs…

Redis實戰(8) -- 分布式鎖Redission底層機制

介紹Redisson 是基于 Redis 實現的 Java 駐內存數據網格&#xff08;In-Memory Data Grid&#xff09;&#xff0c;提供了分布式和可擴展的 Java 數據結構&#xff0c;如分布式鎖、分布式集合等。【注意】如果需要重新實現redission&#xff0c;需要重新設置RedissionClient配置…

Linux基礎測試

linux基礎測試 一、環境準備 基礎環境信息 登錄用戶&#xff1a;root&#xff08;初始密碼&#xff1a;redhat&#xff09; 虛擬機啟動&#xff1a;登錄后執行 virt-manager&#xff0c;右鍵啟動 node1 和 node2 虛擬機 node1 信息&#xff1a;root 密碼為 redhat&#xf…

Linux中Docker Swarm實踐

一、部署前后分離使用你自己的自定義鏡像部署多個副本所有副本使用相同的配置和邏輯Nginx 做反向代理統一入口外部訪問形式如&#xff1a;http://your-domain/api/xxx1.1 建立私庫鏡像已構建并推送到可訪問的鏡像倉庫啟動 Docker Registry 容器docker run -d -p 5000:5000 --re…

Dash 中的 dcc.Clipboard 組件詳解:實現一鍵復制功能

dcc.Clipboard 是 Dash 核心組件庫中的一個實用工具&#xff0c;允許用戶將指定內容一鍵復制到系統剪貼板&#xff0c;極大提升用戶體驗。本文將深入解析該組件的用法、特性和實際應用場景。 一、組件核心功能與價值 dcc.Clipboard 解決了 Web 應用中的關鍵痛點&#xff1a; 簡…

初識C++類的6個默認成員函數

目錄 一、初始化和清理 二、拷貝復制 三、取地址重載 四、重要說明 五、注意事項 六、示例代碼 在C中&#xff0c;當一個類沒有顯式定義某些成員函數時&#xff0c;編譯器會自動生成6個默認成員函數。這些函數可以分為以下幾類&#xff1a; 一、初始化和清理 1、構造函數…

Spring事務失效場景?

題目詳細答案Spring事務失效的場景主要有以下幾種。非public方法使用Transactional場景描述&#xff1a;Spring事務管理是基于AOP實現的&#xff0c;而AOP對于JDK動態代理或CGLib動態代理只會代理public方法。如果事務方法的訪問修飾符為非public&#xff0c;SpringAOP無法正確…

1.電動汽車動力電池系統技術介紹與分類

1.電動汽車動力電池系統技術介紹與分類 1.1 電動汽車發展的三個 “黃金時代” 第一個黃金時代&#xff08;19 世紀末 - 20 世紀初&#xff09; 技術基礎&#xff1a;鉛酸蓄電池發明&#xff08;1859 年&#xff09;&#xff0c;推動電動三輪車&#xff08;1873 年&#xff09;、…

調用阿里云-阿里云百煉 AI

相關文檔&#xff1a;大模型服務平臺百煉控制臺 多輪對話&#xff1a;通義千問模型的多輪對話_大模型服務平臺百煉(Model Studio)-阿里云幫助中心 創建知識庫&#xff1a;大模型服務平臺百煉控制臺 創建智能體&#xff1a;大模型服務平臺百煉控制臺 點擊智能體發布后&#x…

Apache Flink:從實時數據分析到實時AI

引言歡迎踏上這段深入了解 Apache Flink 演進歷程的旅程&#xff0c;Apache Flink 是一項重新定義了實時數據處理的技術。本博客文章基于王峰&#xff08;阿里云開放數據平臺負責人、Apache Flink Committer&#xff09;在 2025 年 Flink Forward Asia 新加坡大會上的演講內容編…

oelove奧壹新版v11.7旗艦版婚戀系統微信原生小程序源碼上架容易遇到的幾個坑,避免遺漏參數白屏顯示等問題

oelove和 金媒我都用過一段時間&#xff0c;其中oelove 用的時間較多&#xff0c;也比較了解這個系統&#xff0c;這個系統比較不錯的就是小程序是原生的&#xff08;完全遵循微信開發者平臺規則非Uniapp&#xff09;開發的&#xff0c;原生小程序的特點就是兼容性好&#xff0…

行為模式-模板方法模式

定義&#xff1a;Define the skeleton of an algorithm in an operation,deferring some steps to subclasses.Template Method lets subclasses redefine certain steps of an algorithm without changing the algorithms structure.&#xff08;定義一個操作中的算法的框架&a…