Opencv之計算機視覺一

一、環境準備

使用opencv庫來實現簡單的計算機視覺。

需要安裝兩個庫:opencv-python和opencv-contrib-python,版本可以自行選擇,注意不同版本的opencv中的某些函數名和用法可能不同

pip install opencv-python==3.4.18.65 -i https://pypi.tuna.tsinghua.edu.cn/simple

pip install opencv-contrib-python==3.4.18.65 -i https://pypi.tuna.tsinghua.edu.cn/simplee


二、讀取圖片文件

1、使用pillow這個庫中的功能

from PIL import Image
aa=Image.open('timg98.jpg')
print(aa)

2、使用opencv中特有的讀取文件的方法?

import cv2  # 讀取的格式是BGR  numpy
import matplotlib.pyplot as plt  # matplotlib讀取的格式與opencv不同
import numpy as np# '''-------------------讀取圖片----------------------------'''
a = cv2.imread('timg98.jpg')#讀取圖片
# print(a)   #  NumPy數組,其中存儲了讀取的圖像文件的像素值。
cv2.imshow('tu',a)  #顯示圖片。顯示圖片的名稱,顯示的圖片數據。將圖片以窗口的形式顯示,后邊的參數第一個參數是窗口名,第二個參數是保存圖片數據的變量b = cv2.waitKey(0)#這里的waitkey函數是設置將里面的數字為非零數,則是指經過多ms后圖片窗口會關閉,#如果里面的數字為0,則是窗口永久不會關閉,按下任意鍵時才會關閉
# # 當里面的參數設置為0時,waitkey這個函數會返回按下按鍵的ASCII碼的數值print(b) #顯示ASCII的數值,可以對應ASCII的表來查找對應的數值cv2.destroyAllWindows() #摧毀這個窗口,減少內存的占用,上面的waitkey已經關閉了窗口,在這里可以不用寫,但是在一些大的項目中,為了防止內存占用,往往需要添加。# # '''調試模型觀察shape,dtype、size屬性'''print("圖像形狀 (shape):", a.shape)   #高、寬、通道數
print("圖像數據類型 (dtype):", a.dtype) #無符號 8 位整數,用于表示像素值的范圍在 0 到 255 之間。
print("圖像大小 (size):", a.size) #表示圖像的大小,通常是一個整數,表示圖像的總像素數,即圖像的高度乘以寬度乘以通道數

3、讀取圖片的灰度圖

c=cv2.imread('../data/4-1.jpg',cv2.IMREAD_GRAYSCALE)?,其中cv2.IMREAD_GRAYSCALE是設置imread讀取圖片是設置圖片為灰度圖,如果后面設置為0,則顯示彩色圖片,不寫效果也是彩色。

c=cv2.imread('../data/4-1.jpg',cv2.IMREAD_GRAYSCALE)     #讀取圖片
c=cv2.resize(c,(500,500))           #圖片原尺寸過大,所以這里對圖片的大小進行重新設置cv2.imshow("tupian",c)      #將圖片以窗口的形式顯示,后邊的參數第一個參數是窗口名,第二個參數是圖片的來源b=cv2.waitKey(0)    #這里的waitkey函數是設置將里面的數字為非零數,則是指經過多ms后圖片窗口會關#閉,如果里面的數字為0,則是窗口永久不會關閉,按下任意鍵時才會關閉
# # 當里面的參數設置為0時,waitkey這個函數會返回按下按鍵的ASCII碼的數值print(b)    #顯示ASCII的數值,可以對應ASCII的表來查找對應的數值cv2.destroyAllWindows()     #摧毀這個窗口,減少內存的占用,上面的waitkey已經關閉了窗口,在這里可#以不用寫,但是在一些大的項目中,為了防止內存占用,往往需要添加print("圖像的形狀:",c.shape)print("圖像的數據類型:",c.dtype)print("圖像的大小:",c.size)#圖片的保存,后面的兩個參數,第一個是圖片保存的位置,第二個是圖片儲存的變量
cv2.imwrite('tupian_gray.jpg',b)

4、視頻文件的讀取

import cv2
# 打開視頻文件
video_capture = cv2.VideoCapture('轉場.mp4')  #  攝像頭:0
# 檢查視頻是否成功打開
if not video_capture.isOpened():print("無法打開視頻文件")exit()
# 循環讀取視頻幀
while True:# 逐幀讀取視頻ret, frame = video_capture.read()  #ret是布爾值,表示是否成功讀取了幀,frame 是讀取到的幀# 檢查是否成功讀取幀if not ret:break# 將圖像從一種顏色空間轉換為另一種顏色空間。frame=cv2.cvtColor(frame,cv2.COLOR_BGR2GRAY)# 顯示當前幀cv2.imshow('Video', frame)# 檢查用戶是否按下 'esc' 鍵,如果是則退出循環if cv2.waitKey(100) == 27:break
# 釋放資源
video_capture.release()
cv2.destroyAllWindows()

5、區域切割

ROI:區域感興趣(Region of Interest)的縮寫。它指的是圖像或視頻中感興趣的特定區域,需要進行分析或處理。
ROI可以由用戶手動選擇,也可以使用計算機視覺算法自動檢測。

a = cv2.imread(r'./timg98.jpg')
b = a[100:300,100:300]  #直接對numpy數組進行切片
cv2.imshow('yuantu',a)
cv2.imshow('qiepian',b)
cv2.waitKey(100000)
cv2.destroyAllWindows()

6、提取RGB顏色通道?

import cv2
# 1. 讀取圖像
a = cv2.imread(r'./timg98.jpg')
# 2. 提取顏色通道
a1 = a[:, :, 0]  # 藍色通道(B通道)
a2 = a[:, :, 1]  # 綠色通道(G通道)
a3 = a[:, :, 2]  # 紅色通道(R通道)
# 或者使用 cv2.split() 來分離顏色通道
b, g, r = cv2.split(a)
# b 包含藍色通道
# g 包含綠色通道
# r 包含紅色通道
cv2.imshow('result', a2)
# 4. 設置窗口顯示時間,單位為毫秒(這里設置為100秒,可以根據需要調整)
cv2.waitKey(100000)
# 5. 關閉所有窗口
cv2.destroyAllWindows()

注意:我們這里是顯示藍色通道的圖像,但是所顯示的圖片確實灰色的,那是因為只顯示藍色通道時,
實際上是將藍色通道作為亮度值,而將綠色和紅色通道設置為默認的最大值,也就是255。這會導致圖像呈現為灰色。
想要展示只包含藍色通道信息的彩色圖像,可以將圖像中的綠色通道和紅色通道設為0,即移除綠色和紅色,只保留藍色。

7、圖片的復制.copy()

import cv2
a = cv2.imread(r'./timg98.jpg')
# 復制原始圖像以避免更改原始圖像
a_new = a.copy()
a_new[:, :, 1] = 0  # 綠色通道設為0
a_new[:, :, 2] = 0  # 紅色通道設為0
# 創建一個窗口來顯示修改后的圖像,并將其命名為'result'
cv2.imshow('result', a_new)
cv2.waitKey(100000)
cv2.destroyAllWindows()

?8、合并顏色通道

import cv2
# 1. 讀取圖像
a = cv2.imread(r'./timg98.jpg')
# 2. 提取顏色通道
a1 = a[:, :, 0]  # 藍色通道(B通道)
a2 = a[:, :, 1]  # 綠色通道(G通道)
a3 = a[:, :, 2]  # 紅色通道(R通道)
# 或者使用 cv2.split() 來分離顏色通道
b, g, r = cv2.split(a)
# b 包含藍色通道  g 包含綠色通道  r 包含紅色通道
# 使用cv2.merge()函數將三個通道重新合并成一個圖像
img = cv2.merge((b, g, r))
# img = cv2.merge((a1,a2,a3)) 或者使用這行代碼
cv2.imshow('result', img)
cv2.waitKey(100000)
cv2.destroyAllWindows()

9、圖片修改

1、圖片打碼?

# 圖片打碼
import numpy as npa = cv2.imread(r'./timg98.jpg')
a[100:200,200:300] = np.random.randint(0,256,(100,100,3))#矩陣賦值必須是相同大小
cv2.imshow('masaike',a)
cv2.waitKey(1000000)
cv2.destroyAllWindows()

?2、圖片組合

a = cv2.imread('timg98.jpg')
b = cv2.imread('zl.png')
b[200:350,200:350] = a[50:200,100:250]#注意:矩陣的大小必須要統一。
cv2.imshow('b',b)
cv2.imshow('a',a)
cv2.waitKey(100000)
cv2.destroyAllWindows()

3、圖片的放縮

cv2.resize
# 用于調整圖像的大小。它有以下幾個參數:
# src:要調整大小的輸入圖像,可以是numpy數組、PIL圖像或其他類型。
# dsize:輸出圖像的大小,可以是一個元組,例如(寬,高),或者使用整數標量來縮放原始圖像。如果dsize為None,則根據scalefx和scalefy縮放原始圖像。
# fx:沿x軸的縮放系數。
# fy:沿y軸的縮放系數。

a = cv2.imread('timg98.jpg')#方法一
a_new = cv2.resize(a,(200,600))   # 寬、高#方法二
# a_new = cv2.resize(a,dsize=None,fx=1.5,fy=1.5)
# print(a.shape)  # 高、寬、通道數cv2.imshow('a',a)
cv2.imshow('a_new',a_new)
cv2.waitKey(100000)
cv2.destroyAllWindows()

10、圖像的運算

1、圖像的加法一


當某位置像素相加得到的數值小于255時,該位置數值為兩圖像的像素值相加之和,
當某位置像素相加得到的數值大于255時,該位置數值將截斷結果并將其減去256,例如相加之后時260,則世紀時260-256=4。

a = cv2.imread('timg98.jpg')
b = cv2.imread('zl.png')
c = a+10    #圖片,
cv2.imshow('yuan',a)
cv2.imshow('a+10',c)
cv2.waitKey(100000)c = a[50:450,50:400]+b[50:450,50:400]
cv2.imshow('a+b',c)
cv2.waitKey(100000)

2、圖像的加法二


???????對于cv2的add()運算,當對圖像a,圖像b進行加法求和時,遵循以下規律
當某位置像素相加得到的數值小于255時,該位置數值為兩圖像的像素值相加之和
當某位置像素相加得到的數值大于255時,該位置數值為255

a = cv2.imread('timg98.jpg')
b = cv2.imread('zl.png')
b = cv2.resize(b,(400,400))
a = cv2.resize(a,(400,400))
c = cv2.add(a,b)   #也可以使用使用
cv2.imshow('a add b',c)
cv2.waitKey(100000)
cv2.destroyAllWindows()

3、圖像的加權運算

就是計算在兩幅圖像的像素值之和時,將每幅圖像的權值考慮進來,可以用公式表示為dst=src1×α+src×β+γ

a = cv2.imread('timg98.jpg')
b = cv2.imread('zl.png')
b = cv2.resize(b,(400,400))
a = cv2.resize(a,(400,400))
#
c =cv2.addWeighted(a,0.2,b,0.8,0)   # 10:圖像的亮度值(常數),將添加到加權和上
cv2.imshow('addWeighted',c)
cv2.waitKey(100000)
cv2.destroyAllWindows()

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

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

相關文章

k8s中PAUSE容器與init容器比較 local卷與hostpath卷比較

目錄 一、PAUSE容器與INIT容器比較 1. Pause 容器 作用 特點 示例 2. Init 容器 作用 特點 示例 3. Pause 容器 vs Init 容器 4. 總結 這兩個哪個先啟動呢? 詳細啟動順序 為什么 Pause 容器最先啟動? 示例 總結 二、local卷與hostpath卷…

Vue3 + TS組件封裝指南

在 Vue 3 TypeScript 中封裝組件時,需要注意以下幾點: 1. Props 定義 使用 defineProps 或 PropType 定義組件的 props,并為其添加類型。 示例: import { defineComponent, PropType } from vue;export default defineComponen…

mybatis_plus的樂觀鎖

樂觀鎖:總是假設最好的情況,每次讀取數據時認為數據不會被修改(即不加鎖),當進行更新操作時,會判斷這條數據是否被修改,未被修改,則進行更新操作。若被修改,則數據更新失…

Redis系列:深入理解緩存穿透、緩存擊穿、緩存雪崩及其解決方案

在使用Redis作為緩存系統時,我們經常會遇到“緩存穿透”、“緩存擊穿”和“緩存雪崩”等問題,這些問題一旦出現,會嚴重影響應用性能甚至造成服務不可用。因此,理解這些問題的產生原因和解決方案非常重要。 本文將全面講解緩存穿透…

AT指令集-NBIOT

是什么? 窄帶物聯網(Narrow Band Internet of Things, NB-IoT)成為萬物互聯網絡的一個重要分支支持低功耗設備在廣域網的蜂窩數據連接,也被叫作低功耗廣域網(LPWAN)NB-IoT支持待機時間長、對網絡連接要求較高設備的高效連接NB-Io…

CBNet:一種用于目標檢測的復合骨干網架構之論文閱讀

摘要 現代頂級性能的目標檢測器在很大程度上依賴于骨干網絡,而骨干網絡的進步通過探索更高效的網絡結構帶來了持續的性能提升。本文提出了一種新穎且靈活的骨干框架——CBNet,該框架利用現有的開源預訓練骨干網絡,在預訓練-微調范式下構建高…

c++中字符串string常用的函數

在C中&#xff0c; std::string 類有許多常用函數&#xff0c;以下是一些常見的&#xff1a; 1. length() 或 size() &#xff1a;返回字符串的長度&#xff08;字符個數&#xff09;&#xff0c;二者功能相同。例如&#xff1a; #include <iostream> #include <str…

《保險科技》

自己在保險行業工作很多年&#xff0c;只是接觸了一些數據的內容&#xff0c;對于保險業務的知識了解的很少&#xff0c;想通過這本書補充一下&#xff0c;但是發現這本書就是一些知識的拼接。 先將保險的歷史&#xff0c;后講保險的定義&#xff0c;然后就是吹噓保險行業和互聯…

藍橋杯第13屆真題2

由硬件框圖可以知道我們要配置LED 和按鍵 一.LED 先配置LED的八個引腳為GPIO_OutPut&#xff0c;鎖存器PD2也是&#xff0c;然后都設置為起始高電平&#xff0c;生成代碼時還要去解決引腳沖突問題 二.按鍵 按鍵配置&#xff0c;由原理圖按鍵所對引腳要GPIO_Input 生成代碼&a…

java之IP 工具類

java程序一直需要獲取物理機的ip&#xff0c;寫了一個ip的工具類&#xff0c;感覺日常所需夠了 import javax.servlet.http.HttpServletRequest; import java.net.InetAddress; import java.net.UnknownHostException;/*** IP 工具類*/ public class IpUtil {public static St…

貪心算法作業參考:P1106,P4995,P5019

貪心算法作業參考&#xff1a;P1106&#xff0c;P4995&#xff0c;P5019 P1106 刪數問題 作業批注&#xff1a; 原作業提交&#xff0c;是刪除k個最大的數。 不一定是刪除最大的數。 參考如下&#xff0c;用例&#xff1a; 輸入&#xff1a; 50074897 2輸出&#xff1a; 4…

雙曲空間學習記錄

文章目錄 前期學習內容雙曲空間中的圖卷積神經網絡 前期學習內容 雙曲空間中的圖卷積神經網絡 250318&#xff1a;這個博客的產生原因是我去看了B站上的一個視頻&#xff0c;up說ppt上傳到github上了&#xff0c;但是我去找了一圈也沒有找到&#xff0c;然后想給他留言&#x…

【ES6新特性】默認參數常見用法

ES6新特性之默認參數的多種用法 &#x1f680;默認參數基礎用法 在ES6中&#xff0c;我們可以直接在函數參數列表中為參數設置默認值&#xff1a; // ES5的實現方式 function greet(name) {name name || Guest;console.log(Hello, ${name}!); }// ES6默認參數寫法 function…

LORA的AB矩陣是針對Transformer的多頭還是MLP

LORA的AB矩陣是針對Transformer的多頭還是MLP Transformer中的矩陣是一個整體還是分開的每個小矩陣 在LORA(Low-Rank Adaptation)中,AB矩陣的應用位置和Transformer中的矩陣拆分方式如下: 1. LORA的AB矩陣作用對象 LORA的AB矩陣主要作用于Transformer的多頭注意力模塊和…

【大模型基礎_毛玉仁】2.4 基于 Encoder-Decoder 架構的大語言模型

更多內容&#xff1a;XiaoJ的知識星球 目錄 2.4 基于 Encoder-Decoder 架構的大語言模型2.4.1 Encoder-Decoder 架構2.4.2 T5 語言模型1&#xff09;T5 模型結構2&#xff09;T5 預訓練方式3&#xff09;T5 下游任務 2.4.3 BART 語言模型1&#xff09;BART 模型結構2&#xff0…

browser-use WebUI + DeepSeek 基于AI的UI自動化解決方案

browser-use WebUI 一、browser-use是什么Browser-use采用的技術棧為&#xff1a; 二、browser-use webui 主要功能使用場景 三、使用教程1.python 安裝2、把項目clone下來3、安裝依賴4、配置環境5、啟動6、配置1.配置 Agent2.配置要用的大模型3.關于瀏覽器的一些設置 四、Deep…

WPF CommunityToolkit.MVVM庫的簡單使用

CommunityToolkit.MVVM 是 .NET 社區工具包中的一部分&#xff0c;它為實現 MVVM&#xff08;Model-View-ViewModel&#xff09;模式提供了一系列實用的特性和工具&#xff0c;能幫助開發者更高效地構建 WPF、UWP、MAUI 等應用程序。以下是關于它的詳細使用介紹&#xff1a; 1…

Windows安裝Apache Maven 3.9.9

第一步下載資源 官網&#xff1a;下載 Apache Maven – Maven 環境變量配置 M2_HOME 指向bin目錄 MAVEN_HOME 指向根目錄 M2_HOME 不確定是否必須要 Path配置 &#xff0c;需要注意MAVEN順序應當在java之前 驗證是否安裝成功&#xff0c;在cmd中以管理員方式打開&#xff0c…

【spring-boot-starter-data-neo4j】創建結點和查找結點操作

配置連接neo4j # application.properties spring.neo4j.uribolt://localhost:7687 spring.neo4j.authentication.usernameneo4j spring.neo4j.authentication.password你的密碼定義實體類 package com.anmory.platform.GraphService.Dao;import org.springframework.data.neo…

pytorch小記(十三):pytorch中`nn.ModuleList` 詳解

pytorch小記&#xff08;十三&#xff09;&#xff1a;pytorch中nn.ModuleList 詳解 PyTorch 中的 nn.ModuleList 詳解1. 什么是 nn.ModuleList&#xff1f;2. 為什么不直接使用普通的 Python 列表&#xff1f;3. nn.ModuleList 的基本用法示例&#xff1a;構建一個包含兩層全連…