opencv圖像基本操作解析與實操

圖片操作

cv2.namedWindow() 創建命名窗口

cv2.imshow()顯示窗口

cv2.destroyAllwindws()摧毀窗口

cv2.resizeWindow()改變窗口大小

cv2.waitKey()等待用戶輸入

cv2.imread()讀取圖像

img.shape 圖片h、w、c(高、寬、通道數

import cv2    # opencv讀取的格式是BGR
import matplotlib.pyplot as plt
import numpy as np# cv2.IMREAD_COLOR 彩色圖像
# cv2.IMREAD_GRAYSCALE 灰度圖像
img = cv2.imread('img1.jpg',cv2.IMREAD_COLOR)# 圖像顯示
cv2.imshow('img1',img)
# 等待時間,毫秒級,0表示任意鍵中止
cv2.waitKey(0)
cv2.destroyAllWindows()

?

視頻操作

cv2.VideoCapture() 可以捕獲攝像頭,用數字來控制不同的設備,例如0,1

如果是視頻文件,直接指定好路徑即可。

vc = cv2.VideoCapture('video1.mp4')
# 檢查是否打開正確
if vc.isOpened():open,frame = vc.read() # 每次讀取1幀,再read再讀取下一幀# 返回的第一個值是bool類型,第二個值是當前這一幀的圖像(三維數組)
else:open = False
# 通常情況下
while open:ret,frame = vc.read()if frame is None:breakif ret == True:gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) # cv2.cvtColor(圖像,轉換方法)cv2.imshow('result',gray)if cv2.waitKey(10) & 0xFF == 27: # 27是esc鍵break
vc.release()
cv2.destroyAllWindows()

ROI

Region Of Interest 直譯為:感興趣的區域

作用為:截取部分圖像數據

# ROI
img = cv2.imread('img1.jpg')
if img is not None:img_partA = img[0:200,0:200] # ROI操作,img[h,w]# 本質是操作數組cv2.imshow('img1',img_partA)cv2.imshow('img2',img)cv2.waitKey(0)cv2.destroyAllWindows()

顏色通道提取

b,g,r = cv2.split(img) # 提取bgr
img = cv2.merge(b,g,r) # 通過bgr組合出一張圖像

只保留R通道顯示

img = cv2.imread("img1.jpg",cv2.IMREAD_COLOR)
b,g,r = cv2.split(img)
# 只保留R   [h,w,c] c表示通道,根據bgr索引,b為0,g為1,r為2
cur_img = img.copy()
cur_img[:,:,0] = 0  # b通道清零
cur_img[:,:,1] = 0  # g通道清零
cv2.imshow("cur_img",cur_img)
cv2.waitKey(0)
cv2.destroyAllWindows()

只保留G通道顯示

img = cv2.imread("img1.jpg",cv2.IMREAD_COLOR)
b,g,r = cv2.split(img)
# 只保留R   [h,w,c] c表示通道,根據bgr索引,b為0,g為1,r為2
cur_img = img.copy()
cur_img[:,:,0] = 0  # b通道清零
cur_img[:,:,2] = 0  # r通道清零
cv2.imshow("cur_img",cur_img)
cv2.waitKey(0)
cv2.destroyAllWindows()

只保留B通道顯示

img = cv2.imread("img1.jpg",cv2.IMREAD_COLOR)
b,g,r = cv2.split(img)
# 只保留R   [h,w,c] c表示通道,根據bgr索引,b為0,g為1,r為2
cur_img = img.copy()
cur_img[:,:,1] = 0  # g通道清零
cur_img[:,:,2] = 0  # r通道清零
cv2.imshow("cur_img",cur_img)
cv2.waitKey(0)
cv2.destroyAllWindows()

邊界填充

img = cv2.imread("img1.jpg",cv2.IMREAD_COLOR)
top_size,bottom_size,left_size,right_size = (50,50,50,50)# cv2.copyMakeBorder(img,top_size,bottom_size,left_size,right_size,borderType) borderType為邊界填充類型
replicate = cv2.copyMakeBorder(img,top_size,bottom_size,left_size,right_size,borderType=cv2.BORDER_REPLICATE)
reflect = cv2.copyMakeBorder(img,top_size,bottom_size,left_size,right_size,borderType=cv2.BORDER_REFLECT)
reflect101 = cv2.copyMakeBorder(img,top_size,bottom_size,left_size,right_size,borderType=cv2.BORDER_REFLECT101)
wrap = cv2.copyMakeBorder(img,top_size,bottom_size,left_size,right_size,borderType=cv2.BORDER_WRAP)
constant = cv2.copyMakeBorder(img,top_size,bottom_size,left_size,right_size,borderType=cv2.BORDER_CONSTANT,value=0)

數值計算

# 部分數值計算(如圖像融合)前提需要兩圖像shape值相同
img1 = cv2.imread("img1.jpg",cv2.IMREAD_COLOR)
img2 = cv2.imread("img2.jpg",cv2.IMREAD_COLOR)
img3 = img1 + 10    # 相當于3個通道中每一個像素數值都加10
img4 = img1 + img2  # 兩張圖像中每個像素的rgb三通道數值相加,# 以rgb888為例,如果一個像素的r相加后>255,則該數值等于相加后%255
img5 = cv2.add(img1,img2) # 兩張圖rgb相加,如果>255,則取最大值255

圖像融合

# 圖像融合前提需要兩圖像shape值相同
img1 = cv2.imread("img1.jpg",cv2.IMREAD_COLOR)
img2 = cv2.imread("img2.jpg",cv2.IMREAD_COLOR)# cv2.addWeighted(img1,img1權重,img2,img2權重,偏置項(整體提亮多少))
h2 = img2.shape[0]
w2 = img2.shape[1]
img1_new = cv2.resize(img1,(w2,h2))
res = cv2.addWeighted(img1_new,0.4,img2,0.6,0)
cv2.imshow('res',res)
cv2.waitKey(0)
cv2.destroyAllWindows()

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

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

相關文章

kafka--基礎知識點--6.1--LEO、HW、LW

在 Apache Kafka 中,LEO(Log End Offset)、HW(High Watermark)、和 LW(Low Watermark) 是副本機制和日志管理中的核心概念,共同確保數據一致性、可見性和存儲效率。以下是它們的詳細…

在線深凹槽深檢測方法都有哪些 —— 激光頻率梳 3D 輪廓檢測

引言在制造業中,深凹槽深度的精確檢測是保證零部件質量的關鍵環節。隨著智能制造的推進,在線檢測需求日益迫切,傳統檢測方法在效率和精度上的不足逐漸顯現。本文將梳理在線深凹槽深的傳統檢測方法,并重點探討激光頻率梳 3D 輪廓檢…

NumPy 數組拼接的高級技巧與實踐

在數據處理和機器學習領域,NumPy 是 Python 中最核心的科學計算庫之一。NumPy 數組(ndarray)的拼接操作是數據預處理中極為常見的需求。本文將深入探討如何將不同形狀的 NumPy 數組進行拼接,特別是如何將多個一維數組與二維數組進…

原創-基于 PHP 和 MySQL 的證書管理系統 第三版

第一版屬于開源版本,所以后臺功能沒有開發許多出來,今天分享證書查詢第三版; 通過幾天的緊急寫代碼及測試;第三版基本可以上線上,不過后面有一些BUG只能一邊修復。 演示地址:物星科云證書管理系統 第三版…

爬蟲虛擬環境

conda create --name myrepenv python3.12創建一個名為 myrepenv、Python 版本為 3.12 的全新 Conda 虛擬環境,適合需要隔離依賴或測試不同 Python 版本的項目。我的方式創建(需要指定盤符)conda create --prefixD:\Anaconda3\envs\myrepenv python3.12展示所下的co…

Netty集群方案詳解與實戰(Zookeeper + Redis + RabbitMQ)

一、背景 二、Netty 單體架構的優缺點 優點 缺點 三、Netty 集群架構的優缺點 優點 缺點 四、適用場景對比 五、Netty單體架構代碼實現 六、Netty集群架構方案實現 方案一、Nginx負載均衡實現集群(較為簡單) Nginx配置 前端連接方式 方案二、NacosGateway(結合…

Oracle遷移到高斯,查詢字段默認小寫,解決辦法

一、問題說明 Oracle中,查詢結果字段默認大寫。高斯中,查詢結果字段默認小寫。在Mybatis的xml中,如果查詢語句使用Map接收查詢結果,使用resultType"java.util.HashMap"或resultType"Map"等寫法,返…

Android Jetpack Compose + MVVM 開發流程深度分析

核心組件關系圖 [View] -- 觀察 --> [ViewModel] -- 操作 --> [Repository]| | Compose UI StateFlow/LiveData| | 用戶交互事件 Room/Retrofit| …

Tailwind CSS快速上手 Tailwind CSS的安裝、配置、使用

📚前言 在Web前端開發的歷史長河中,CSS的編寫方式經歷了多次演進,從早期的原生CSS 到 CSS預處理(Less/Sass/Stylus) 到 CSS-in-JS(Styled-Components/Emotion) 再到 Utility-First 原子化CSS。每一種演進方案其本質都是圍繞“開發效率”、“…

單例模式的智慧:從UVM看控制的藝術

有時候,生活中的很多東西其實只需要一個就夠了,就像一個公司只需要一個CEO,一個王朝只需要一個皇帝。在UVM驗證環境中,也有很多這樣的需求——有些對象,我們希望它在整個仿真過程中只存在一個實例。這就是我們今天要聊…

Hexo - 免費搭建個人博客01 - 安裝軟件工具

導言我的博客:https://q164129345.github.io/ Hexo 作為一個 Node.js 框架,它依賴于 Node.js 運行時環境來執行。 一、安裝Node.js官方網址:https://nodejs.org/zh-cn追求系統穩定性、可靠性以及希望減少維護頻率的用戶來說,LTS版…

【Kubernetes】集群啟動nginx,觀察端口映射,work節點使用kubectl配置

參考b站叩丁狼總結:完整版Kubernetes(K8S)全套入門微服務實戰項目,帶你一站式深入掌握K8S核心能力 在master節點執行 kubectl create deployment nginx --imagenginxkubectl expose deployment nginx --port80 --typeNodePort1. …

20250704-基于強化學習在云計算環境中的虛擬機資源調度研究

基于強化學習在云計算環境中的虛擬機資源調度研究 隨著云計算規模的持續擴大,數據中心虛擬機資源調度面臨動態負載、異構資源適配及多目標優化等挑戰。傳統啟發式算法在復雜場景下易陷入局部最優,而深度強化學習(DRL)憑借序貫決策…

day 33打卡

day 21 常見的降維算法 # 先運行之前預處理好的代碼 import pandas as pd import numpy as np import matplotlib.pyplot as plt import seaborn as sns import warnings warnings.filterwarnings(ignore)# 設置中文字體 plt.rcParams[font.sans-serif] [SimHei] plt.rcParam…

sec(x)積分推導

在MATLAB中繪制 sec?(x)、cos(x) 和 ln?∣sec?(x)tan?(x)∣的函數圖像,需要特別注意 sec?(x) 在 cos?(x)0(即 xπ/2kπ)處的奇點。(deepseek生成代碼)% 定義x范圍(-2π到2π),…

gpt面試題

vue面試題 💡 一、響應式系統相關 ?1. Vue 3 的響應式系統是如何實現的?和 Vue 2 有何本質區別? 答案: Vue 3 使用 Proxy 實現響應式(位于 vue/reactivity 模塊),替代 Vue 2 的 Object.defineP…

【基于OpenCV的圖像處理】圖像預處理之圖像色彩空間轉換以及圖像灰度化處理

目錄 零、寫在前面的話 一、圖像色彩空間轉換 1.1 RGB顏色空間 1.1.1 RGB顏色空間概念 1.1.2 RGB顏色模型?編輯 1.1.3 關于顏色加法 1.1.4 顏色加權加法 1.2 HSV顏色空間 1.2.1 HSV顏色空間概念 1.2.2 HSV顏色模型 1.2.3 應用意義 1.3 顏色轉換 1.3.1 轉換方法 …

Java TCP 通信詳解:從基礎到實戰,徹底掌握面向連接的網絡編程

作為一名 Java 開發工程師,你一定在實際開發中遇到過需要建立穩定連接、可靠傳輸、有序通信等場景。這時,TCP(Transmission Control Protocol) 通信就成為你必須掌握的重要技能之一。TCP 是一種面向連接、可靠、基于字節流的傳輸協…

HTML5 網頁游戲設計開發——1、HTML基礎

前言 互聯網上的應用程序被稱為Web程序,Web引用用程序是用Web文檔(網頁)累表現用戶界面,而Web文檔都遵守HTML格式。HTML5是最新的HTML標準。之前的版本HTML4.01于1999年發布,小20年過去了,互聯網已經發聲了…

opencv圖片標注

功能使用python opencv, 將文字信息標注在圖片中同一張圖片中涉及多次標注文字大小為標注框的0.3倍使用多綫程運行import cv2 import threading import numpy as npdef draw_annotations(item, annotations):"""在圖片上繪制標注框和文本annotations: 標注列表…