day26圖像處理OpenCV

文章目錄

  • 一、OpenCV
    • 1.介紹
    • 2.下載
    • 3.圖像的表示
    • 4.圖像的基本操作
      • 4.1圖片讀取或創建
        • 4.1.1讀取
        • 4.1.2創建
      • 4.2創建窗口
      • 4.3顯示圖片
        • 4.3.1設置讀取的圖片
        • 4.3.2設置顯示多久
        • 4.3.3釋放
      • 4.4.保存圖片
      • 4.5圖片切片(剪裁)
      • 4.6圖片大小調節
    • 5.在圖像中繪值
      • 5.1繪制直線
      • 5.2繪制圓形
      • 5.3繪制矩形
      • 5.4添加文字
      • 5.5綜合案例
    • 6.讀取視頻

一、OpenCV

1.介紹

  • OpenCV(開放源代碼計算機視覺庫)是一個開源的計算機視覺和機器學習軟件庫。由一系列 C++ 類和函數構成,用于圖像處理、計算機視覺領域的算法實現。

  • OpenCV-Python使用Numpy,這是一個高度優化的數據庫操作庫。所有OpenCV數組結構都轉換為Numpy數組。這也使得與使用Numpy的其他庫(如SciPy和Matplotlib)集成更容易。

2.下載

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

3.圖像的表示

  • 圖像一般是RGB三原色圖。RGB圖上的每個點都是由紅(R)、綠(G)、藍(B)三個顏色按照一定比例混合而成的;在OpenCV中,默認情況下,彩色圖像是以BGR(藍-綠-紅)順序存儲
  • 彩色圖像:三維數組存儲【行數,列數,通道數(一般是3)】
  • 灰色圖像:二維存儲【行數,列數】
  • 數組存儲的數據類型(dtype):圖像中的每個像素值的數據類型決定了可以存儲的最大值。例如,8位無符號整數(uint8)允許的范圍是從0到255。

4.圖像的基本操作

4.1圖片讀取或創建

4.1.1讀取
  • cv2.imread(filename)
  • 參數:
    • filename:圖像路徑
4.1.2創建
import cv2
import numpy as np# 設置圖像尺寸
height, width = 512, 512
# 創建一個空白的彩色圖像-----三維數組,8位
img = np.zeros((height, width, 3), dtype=np.uint8)
# 修改像素值-----0~255的隨機整數,大小相同的數組
img[::] = np.random.randint(0, 256, img.shape)# 設置顯示的圖像---z'd
cv2.imshow('Random Color Image', img)
# 顯示時間
cv2.waitKey(0)
# 釋放內存
cv2.destroyAllWindows()

4.2創建窗口

用于顯示圖片。不創建也可以,在顯示的時候可以自動創建。

  • cv2.namedWindow(winname [,窗口屬性])

  • 使用 cv2.namedWindow() 方法創建一個新的窗口。你可以為這個窗口指定一個名稱,并且可以選擇窗口的屬性(例如,是否可調整大小)。

  • 參數:

  • winname:窗口名

  • 窗口屬性:窗口大小是否可調整

    • cv2.WINDOW_AUTOSIZE:默認,窗口自適應大小,不能調整
    • cv2.WINDOW_NORMAL:窗口大小是可調整的,用戶可以通過鼠標拖動窗口邊緣來自由改變窗口大小。

4.3顯示圖片

4.3.1設置讀取的圖片

cv2.imshow(winname,img)

參數:

  • winname:顯示圖像的窗口名,以字符串類型表示
  • img:要顯示的圖像

注意:在調用顯示圖像的API后,要調用cv2.waitKey(0)給圖像繪制留下時間,否則窗口會出現無響應情況,并且圖像無法顯示出來。

4.3.2設置顯示多久

cv.waitKey(n):

  • n = 0:一直顯示

  • n > 0:顯示 n毫秒

4.3.3釋放

在關閉圖像后執行

  • cv2.destroyAllWindows():立即銷毀所有(打開的)窗口
  • cv2.destroyWindow(winname):關閉指定名稱的窗口。省略則銷毀所有已打開的窗口。

4.4.保存圖片

cv2.imwrite(path,img)

參數:

  • path:圖片保存的路徑和圖片名
  • img:要保存的圖像

4.5圖片切片(剪裁)

從圖像中提取一個子區域(矩形區域)。

讀取到的圖片是一個numpy.ndarray類型的數組,所以可以直接切片操作

  • img[y:y+h,x:x+w]提取的是從(x,y)開始,高度為h,寬度為w的矩形區域

示例:

import numpy as np
import cv2 as cv
# 讀取圖像
img=cv.imread("images/001.jpg")
print(img.shape)
# 定義剪裁后圖像的寬度和高度(以像素為單位)
h = 300
w = 500
# 定義剪裁的起始點,坐標小于圖片的寬高
y=100
x=200
# 剪裁
img2=img[y:y+h,x:x+w]
print(img2.shape)

4.6圖片大小調節

  • cv2.resize是Opencv庫中用于調整圖像大小的函數,在圖像處理中很常用,特別是在要對圖像進行縮放以適應不同需求時。
  • cv2.resize(img,dsize)
    • img:輸入圖像,通常是二維或三位NumPy數組。
    • dsize:輸出圖像的尺寸,是一個二元組(w,h)
  • 示例:
import cv2 as cv
# 讀取圖片
img=cv.imread("images/001.jpg")
print(img.shape)
# 調整的大小
dsize=(100,200)
new_img=cv.resize(img,dsize)
print(new_img.shape)

5.在圖像中繪值

5.1繪制直線

  • cv2.line(img,sart,end,color,thickness)

  • 參數

    • img:要繪制直線的圖像
    • start、end:直線的起點和終點坐標
    • color:直線的顏色(對于彩色圖像,使用 BGR 格式指定顏色)
    • thickness:線條寬度

5.2繪制圓形

  • cv2.circle(img,centerpoint,r,color,thickness,cv.LINE_AA)

  • 參數:

    • img:要繪制圓形的圖片
    • centerpoint、r:圓心坐標和半徑
    • color:線條顏色
    • tnickness:線條寬度,為-1時完全填充顏色
    • cv.LINE_AA: 反走樣技術,讓圖行邊緣更光滑

5.3繪制矩形

  • cv2.rectangle(img,leftupper,rightdown,color,thickness)

  • 參數:

    • img:要繪制矩形的圖像
    • leftupper、rightdown:矩形的左上角和右下角坐標
    • color:線條的顏色
    • thickness:線條的寬度

5.4添加文字

  • cv2.putText(img,text,station,font,Fontscale,color,thickness,cv2.LINE_AA)

  • 參數:

    • img:要添加文字的圖像
    • text:要寫入的文本數據
    • station:文本的放置位置
    • font:字體樣式
    • Fontscale:字體大小
    • thickness:字體線條寬度
    • cv2.LINE_AA: 反走樣技術,讓圖行邊緣更光滑

5.5綜合案例

import cv2 as cv
# 讀取圖片
img = cv.imread("./imgs/cat1.png")
# 繪制直線---起點,終點,顏色,粗細
cv.line(img, [100,100], [400, 400], [0, 0, 255], 2)
# 繪制圓形---圓心,半徑,顏色,粗細,抗鋸齒(平滑)
cv.circle(img, [300, 300], 50, [0, 255, 0], 2,cv.LINE_AA)
# 繪制矩形---左上角,右下角,顏色,粗細,抗鋸齒(平滑)
cv.rectangle(img, [100, 100], [400, 400], [255, 0, 0], 2, cv.LINE_AA)
# 繪制文字---文字內容,哪里開始寫,字體類型,字體大小,顏色,字體粗細
cv.putText(img, "Hello World!",(450,450), cv.FONT_ITALIC, 1, [255, 0, 0], 2)cv.imshow("Cat", img)
cv.waitKey(0)
cv.destroyAllWindows()

6.讀取視頻

  • cap = cv2.VideoCapture(path)

    • path:視頻流資源路徑設置為;填0,代表從默認攝像頭捕獲視頻流(自拍)
  • ret,frame = cap.read()

  • 返回值cap調用read()方法得到一個布爾值和一幀圖像,布爾值表示是否成功讀取到幀,如果為False,可能是因為視頻結束或讀取失敗,如果為True,frame則是當前幀的圖像數據。

示例:

import cv2 as cv
# 創建VideoCapture對象,參數為攝像頭索引(通常為0,如果為單一攝像頭)
vi=cv.VideoCapture(0)
while True:ret,frame=vi.read()if not ret:print("error")breakcv.imshow("frame",frame)# 等待40毫秒并檢查按鍵事件,獲取按鍵的ASCII碼,判斷按鍵是否為q鍵if cv.waitKey(40) & 0xFF==ord('q'):break
vi.release()# 釋放攝像頭資源
cv.destroyAllWindows()

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

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

相關文章

零基礎開始學習鴻蒙開發-智能家居APP離線版介紹

目錄 1.我的小屋 2.查找設備 3.個人主頁 前言 好久不發博文了,最近都忙于面試,忙于找工作,這段時間終于找到工作了。我對鴻蒙開發的激情依然沒有減退,前幾天做了一個鴻蒙的APP,現在給大家分享一下! 具體…

C++的*了又*

先看下面一段代碼 class HeapWord {friend class VMStructs;private:char *i; };主函數 #include "HeapWord.hpp" int main() {HeapWord *heapword new HeapWord();HeapWord *p new HeapWord();HeapWord **p1 new HeapWord *();heapword 3;*(HeapWord **)p he…

yolov8在windows系統的C++版本的onnxruntime部署方法

1.各個軟件的的環境需要保持在統一的版本。 onnxruntime需要和cuda的版本對應上,版本號:onnxruntime-win-x64-gpu-1.18.1 ,鏈接: NVIDIA - CUDA | onnxruntime cuda:本機顯卡支持的版本,cuda11.7,鏈接:CUDA Toolkit Archive | NVIDIA Developer cudnn:需要對應到cud…

js chrome 插件,下載微博視頻

修改說明: 代碼資源,免積分下載 起因, 目的: 最初是想下載微博上的NBA視頻,因為在看網頁上看視頻很不方便,快進一次是10秒,而本地 VLC 播放器,快進一次是5秒。另外我還想做點視頻剪輯。 對比…

【vue3】@click函數傳動態變量參數

根據java的學習&#xff0c;摸索了一下vue3 函數傳參的方式。以此作為記錄。有更好的其它方式&#xff0c;可以評論區補充。 <script> const tmpref(); </script><button click"tmpFunction(傳遞參數:tmp)">按鈕</button> // 直接【字符串…

jmeter 集成ZAP進行接口測試中的安全掃描 實現方案

以下是將 JMeter 集成 ZAP(OWASP Zed Attack Proxy)進行接口測試中安全掃描的實現方案: 1. 環境準備 JMeter 安裝:從 JMeter 官方網站(https://jmeter.apache.org/download_jmeter.cgi)下載并安裝 JMeter,確保其版本穩定。ZAP 安裝:從 ZAP 官方網站(https://www.zapr…

全能格式轉換器v16.3.0.159綠色便攜版

前言 全能格式轉換器具有音視頻格式轉換、合并視頻、壓縮視頻、錄制視頻、下載視頻、DVD刻錄等功能。以超快的轉換速度及強大的功能在國外名聲大噪&#xff0c;轉換速度是市面同類產品的30倍&#xff0c;操作簡便&#xff0c;支持158種視頻格式無損轉換&#xff0c;批量轉換高…

【基于開源insightface的人臉檢測,人臉識別初步測試】

簡介 InsightFace是一個基于深度學習的開源人臉識別項目,由螞蟻金服的深度學習團隊開發。該項目提供了人臉檢測、人臉特征提取、人臉識別等功能,支持多種操作系統和深度學習框架。本文將詳細介紹如何在Ubuntu系統上安裝和實戰InsightFace項目。 目前github有非常多的人臉識…

設計一個簡單的權限管理系統

針對大規模服務器集群的權限管理系統設計&#xff0c;需結合 角色分層、最小權限原則 和 動態權限控制 來實現安全高效的權限管理。以下是分階段設計方案&#xff1a; 一、核心設計思路 基于角色的訪問控制&#xff08;RBAC&#xff09; 定義角色層級&#xff08;如董事長 >…

使用 nano 文本編輯器修改 ~/.bashrc 文件與一些快捷鍵

目錄 使用 nano 編輯器保存并關閉文件使用 sed 命令直接修改文件驗證更改 如果你正在使用 nano 文本編輯器來修改 ~/.bashrc 文件&#xff0c;以下是保存并關閉文件的具體步驟&#xff1a; 使用 nano 編輯器保存并關閉文件 打開 ~/.bashrc 文件 在終端中運行以下命令&#xf…

spm12_fMRI 2*4混合方差分析 Flexible factorial 對比矩陣

實驗設計&#xff1a;2*4被試內設計 分析模型&#xff1a;spm 二階分析中的 Flexible factorial 問題&#xff1a;Flexible factorial交互作用對比矩陣如何編寫&#xff1f; 老師&#xff1a;deepseek老師【大神們看看這個矩陣是否可以如下編寫&#xff1f;】 以下是來自de…

用Python修改字體字形與提取矢量數據:fontTools實戰指南

字體設計與分析是NLP和視覺領域的交叉應用&#xff0c;而**fontTools** 是一款強大的Python庫&#xff0c;可以讓我們直接操作字體文件的底層結構。本文將通過兩個實用函數&#xff0c;展示如何修改特定字形和提取所有字形的矢量數據&#xff0c;幫助開發者快速上手字體編輯與分…

Windows 11 PowerShell重定向文本文件的編碼問題

目錄 問題的由來 編碼導致的問題 解決辦法 VSCode進行轉換 記事本進行轉換 直接指定輸出的文本編碼 總結 問題的由來 在我的嵌入式系統的課程中有一個裸機開發的實驗&#xff0c;其中需要把圖片等文件轉換為C語言數組保存在程序中。課程中&#xff0c;我推薦了CodePlea的…

SQL開發的智能助手:通義靈碼在IntelliJ IDEA中的應用

SQL 是一種至關重要的數據庫操作語言&#xff0c;盡管其語法與通用編程語言有所不同&#xff0c;但因其在眾多應用中的廣泛使用&#xff0c;大多數程序員都具備一定的 SQL 編寫能力。然而&#xff0c;當面對復雜的 SQL 語句或優化需求時&#xff0c;往往需要專業數據庫開發工程…

算法——分支限界

學習目標&#xff1a; 掌握算法入門知識 學習內容&#xff1a; 分支限界的定義例題詳細步驟講解&#xff08;找牛&#xff09; 1. 分支限界的定義 分支限界法是一種用于求解 組合優化問題 的算法框架&#xff0c;通過 系統性地搜索解空間樹&#xff0c;并結合 剪枝策略 來避…

對接日本金融市場數據全指南:K線、實時行情與IPO新股

一、日本金融市場特色與數據價值 日本作為全球第三大經濟體&#xff0c;其金融市場具有以下顯著特點&#xff1a; 成熟穩定&#xff1a;日經225指數包含日本頂級藍籌股獨特交易時段&#xff1a;上午9:00-11:30&#xff0c;下午12:30-15:00&#xff08;JST&#xff09;高流動性…

解決opencv中文路徑問題

見cv_imread函數和cv_imwrite函數 import cv2 import os import matplotlib.pyplot as plt from paddleocr import PaddleOCR, draw_ocr import numpy as np import urllib.parse # Add this import statementfrom txt_get import ImageTextExtractor# 初始化OCR&#xff0c;…

Linux中的Vim與Nano編輯器命令詳解

&#x1f4e2; 友情提示&#xff1a; 本文由銀河易創AI&#xff08;https://ai.eaigx.com&#xff09;平臺gpt-4-turbo模型輔助創作完成&#xff0c;旨在提供靈感參考與技術分享&#xff0c;文中代碼與命令建議通過官方渠道驗證。 在Linux系統中&#xff0c;文本編輯是最常用的…

寶馬集團加速 ERP 轉型和上云之旅

寶馬集團&#xff08;BMW Group&#xff09;作為全球領先的豪華汽車和摩托車制造商&#xff0c;致力于構建更加智能、綠色、人性化的出行體驗。為了支持其全球化、數字化業務戰略&#xff0c;寶馬集團正在進行大規模的 IT 體系升級和 ERP 云轉型。該項目以“RISE with SAP S/4H…

大數據學習(105)-Hbase

&#x1f34b;&#x1f34b;大數據學習&#x1f34b;&#x1f34b; &#x1f525;系列專欄&#xff1a; &#x1f451;哲學語錄: 用力所能及&#xff0c;改變世界。 &#x1f496;如果覺得博主的文章還不錯的話&#xff0c;請點贊&#x1f44d;收藏??留言&#x1f4dd;支持一…