OpenCV的基本用法全解析

?

《小白入門:OpenCV的基本用法全解析》

嗨,朋友們!之前咱們知道了OpenCV在機器視覺里就像個超級厲害的瑞士軍刀,那今天咱們就來好好嘮嘮,**OpenCV到底該怎么用呢?**這就像是拿到了一把好劍,咱們得知道怎么耍起來才行。

一、安裝OpenCV

在開始使用OpenCV之前,咱們得先把它安裝好。這就像是你要做飯,得先有鍋碗瓢盆一樣。如果你是用pip來管理Python包的話,那安裝就很簡單啦,只需要在命令行里輸入:

pip?install?opencv?-?python

等安裝完成,你就已經邁出了使用OpenCV的第一步啦。

二、讀取和顯示圖像

(一)讀取圖像

這是OpenCV最基本的操作之一,就像你打開相冊看照片一樣。你可以用cv2.imread()函數來讀取圖像文件。比如說:

import?cv2#?讀取圖像文件,這里假設圖像文件名為test.jpg,在當前工作目錄下
img?=?cv2.imread('test.jpg')

這里的img就是一個包含了圖像數據的對象啦。

(二)顯示圖像

讀取了圖像之后,咱們得看看它吧。這時候就用到了cv2.imshow()函數。不過要注意哦,這個函數顯示圖像的時候,需要一個窗口名字作為第一個參數,圖像對象作為第二個參數。而且,為了讓窗口一直顯示著,我們還得加上cv2.waitKey(0),這就像是告訴程序在這里等一下,等用戶按下任意鍵再繼續。最后,看完圖像后要用cv2.destroyAllWindows()來關閉所有打開的窗口。完整的代碼就像這樣:

import?cv2img?=?cv2.imread('test.jpg')
cv2.imshow('My?Image',?img)
cv2.waitKey(0)
cv2.destroyAllWindows()

三、圖像的基本處理

(一)調整圖像大小

有時候圖像太大了或者太小了,我們想調整一下它的大小。這時候就可以用cv2.resize()函數啦。比如說,你想把圖像的寬度調整為原來的一半,高度按照原來的比例自動調整,可以這樣做:

import?cv2img?=?cv2.imread('test.jpg')
height,?width?=?img.shape[:2]
new_width?=?int(width?/?2)
#?這里使用cv2.INTER_AREA插值方法,適合縮小圖像
resized_img?=?cv2.resize(img,?(new_width,?height),?interpolation?=?cv2.INTER_AREA)
cv2.imshow('Resized?Image',?resized_img)
cv2.waitKey(0)
cv2.destroyAllWindows()

(二)轉換圖像顏色空間

圖像有不同的顏色空間,像常見的BGR(OpenCV默認的顏色空間)、灰度圖等。如果你想把彩色圖像轉換為灰度圖,就可以用cv2.cvtColor()函數。這在很多圖像處理任務里很有用,比如邊緣檢測的時候,灰度圖處理起來更方便。

import?cv2img?=?cv2.imread('test.jpg')
gray_img?=?cv2.cvtColor(img,?cv2.COLOR_BGR2GRAY)
cv2.imshow('Gray?Image',?gray_img)
cv2.waitKey(0)
cv2.destroyAllWindows()

四、圖像的濾波操作

(一)高斯濾波

高斯濾波就像是給圖像做了一個平滑的處理,可以讓圖像變得更加細膩,去除那些小噪點。用cv2.GaussianBlur()函數就可以實現啦。

import?cv2img?=?cv2.imread('test.jpg')
#?這里的(5,?5)是高斯核的大小,0表示根據核的大小自動計算標準差
blurred_img?=?cv2.GaussianBlur(img,?(5,?5),?0)
cv2.imshow('Blurred?Image',?blurred_img)
cv2.waitKey(0)
cv2.destroyAllWindows()

(二)中值濾波

中值濾波對于去除椒鹽噪聲特別有效。它是用像素鄰域內的中值來代替中心像素的值。可以用cv2.medianBlur()函數來實現。

import?cv2img?=?cv2.imread('test.jpg')
#?這里的5表示濾波器的大小
median_blurred_img?=?cv2.medianBlur(img,?5)
cv2.imshow('Median?Blurred?Image',?median_blurred_img)
cv2.waitKey(0)
cv2.destroyAllWindows()

五、邊緣檢測

邊緣檢測就像是給圖像做了一個輪廓勾勒,找出圖像里物體的邊緣。OpenCV里有好幾種邊緣檢測的方法,其中最著名的是Canny邊緣檢測,用cv2.Canny()函數。

import?cv2img?=?cv2.imread('test.jpg')
gray_img?=?cv2.cvtColor(img,?cv2.COLOR_BGR2GRAY)
#?這里的100和200是Canny算法的兩個閾值
edges?=?cv2.Canny(gray_img,?100,?200)
cv2.imshow('Edges',?edges)
cv2.waitKey(0)
cv2.destroyAllWindows()

六、繪制形狀和文字

(一)繪制形狀

在圖像上繪制形狀也是很常見的操作,比如畫個矩形、圓形之類的。以畫矩形為例,可以用cv2.rectangle()函數。

import?cv2img?=?cv2.imread('test.jpg')
#?這里的(10,?10)是矩形左上角的坐標,(100,?100)是矩形右下角的坐標,(0,?255,?0)是矩形的顏色(BGR格式),2是線條的粗細
cv2.rectangle(img,?(10,?10),?(100,?100),?(0,?255,?0),?2)
cv2.imshow('Image?with?Rectangle',?img)
cv2.waitKey(0)
cv2.destroyAllWindows()

(二)繪制文字

如果想在圖像上添加文字,可以用cv2.putText()函數。

import?cv2img?=?cv2.imread('test.jpg')
font?=?cv2.FONT_HERSHEY_SIMPLEX
#?這里的'Hello?World'是要寫的文字,(10,?500)是文字的起始坐標,1是字體大小,(255,?255,?255)是文字的顏色(白色),2是線條粗細
cv2.putText(img,?'Hello?World',?(10,?500),?font,?1,?(255,?255,?255),?2)
cv2.imshow('Image?with?Text',?img)
cv2.waitKey(0)
cv2.destroyAllWindows()

七、總結

好啦,朋友們,上面這些就是OpenCV的一些基本用法啦。從讀取和顯示圖像,到圖像的基本處理、濾波、邊緣檢測,再到繪制形狀和文字,這些都是構建更復雜機器視覺應用的基礎。就像蓋房子,先把磚頭、水泥這些基礎材料準備好,才能蓋起高樓大廈。

小伙伴們,你們有沒有試著用OpenCV做一些小的圖像處理項目呢?或者在使用過程中遇到了什么問題呢?歡迎在評論區留言討論哦。

?

?

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

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

相關文章

匯川EASY系列之以太網通訊(MODBUS_TCP做從站)

匯川easy系列PLC做MODBUS_TCP從站,不需要任何操作,但是有一些需要知道的東西。具體如下: 1、匯川easy系列PLC做MODBUS_TCP從站,,ModbusTCP服務器默認開啟,無需設置通信協議(即不需要配置),端口號為“502”。ModbusTCP從站最多支持31個ModbusTCP客戶端(ModbusTCP主站…

在 Offset Explorer 中配置多節點 Kafka 集群的詳細指南

一、是否需要配置 Zookeeper? Kafka 集群的 Zookeeper 依賴性與版本及運行模式相關: Kafka 版本是否需要 Zookeeper說明0.11.x 及更早版本? 必須配置Kafka 完全依賴 Zookeeper 管理元數據2.8 及以下版本? 必須配置Kafka 依賴外置或內置的 Zookeeper …

前端-選中pdf中的文字并使用,顯示一個懸浮的翻譯按鈕(本地pdfjs+iframe)不適用textlayer

使用pdfjs移步– vue2使用pdfjs-dist實現pdf預覽(iframe形式,不修改pdfjs原來的ui和控件,dom層可以用display去掉一部分組件) 方案1:獲取選擇文本內容的最前面的字符坐標的位置(這種寫法會導致如果選擇超出…

生活電子常識-deepseek-r1本地化部署+ui界面搭建

前言 deepseek-r1 14b模型,32b模型部署在本地電腦上也能實現非常好的性能。 因此有興趣研究了下如何在本地部署。 同時最新流行mauns工作流,他們提供一句話實現網頁端任意應用的能力。實際上,你也可以用本地的模型來實現離線的ai工作流功能。…

mac絲滑安裝Windows操作系統【絲滑簡單免費】

mac絲滑安裝Windows操作系統【絲滑&簡單&免費】 記錄mac絲滑安裝windows系統1、安裝免費版 VMware fusion 132、安裝Windows鏡像文件3、跳過聯網安裝(完成1后將2拖入1 點點點 即可來到3的環節)4、 安裝vmware 工具【非常重要,涉及聯網…

基于Spring Boot的企業內管信息化系統的設計與實現(LW+源碼+講解)

專注于大學生項目實戰開發,講解,畢業答疑輔導,歡迎高校老師/同行前輩交流合作?。 技術范圍:SpringBoot、Vue、SSM、HLMT、小程序、Jsp、PHP、Nodejs、Python、爬蟲、數據可視化、安卓app、大數據、物聯網、機器學習等設計與開發。 主要內容:…

Pytorch實現之對稱卷積神經網絡結構實現超分辨率

簡介 簡介:針對傳統的超分辨率重建技術所重建的圖像過于光滑且缺乏細節的問題,作者提出了一種改進的生成對抗圖像超分辨率網絡。 該改進方法基于深度神經網絡,其生成模型包含多層卷積模塊和多層反卷積模塊,其中在感知損失基礎上增加了跳層連接和損失函數。 該判別模型由多…

Scikit-learn模型構建全流程解析:從數據預處理到超參數調優

模型選擇與訓練步驟及示例 1. 數據準備與探索 步驟說明:加載數據并初步探索其分布、缺失值、異常值等。 注意事項: 檢查數據類型(數值/類別)、缺失值和異常值。對類別型特征進行編碼(如獨熱編碼)。 實例&…

001-JMeter的安裝與配置

1.前期準備 下載好JMeter : https://jmeter.apache.org/download_jmeter.cgi 下載好JDK : :Java Downloads | Oracle 中國 下載圖中圈藍的JMeter和JDK就行,讓它邊下載,我們邊往下看 2.為什么要下載并安裝JDK ? JMeter 是基于 Java 開發的工具&#…

第2.2節 Android Jacoco插件覆蓋率采集

JaCoCo(Java Code Coverage)是一款開源的代碼覆蓋率分析工具,適用于Java和Android項目。它通過插樁技術統計測試過程中代碼的執行情況,生成可視化報告,幫助開發者評估測試用例的有效性。在github上開源的項目&#xff…

特征工程自動化(FeatureTools實戰)

目錄 特征工程自動化(FeatureTools實戰)1. 引言2. 項目背景與意義2.1 特征工程的重要性2.2 自動化特征工程的優勢2.3 工業級數據處理需求3. 數據集生成與介紹3.1 數據集構成3.2 數據生成方法4. 自動化特征工程理論基礎4.1 特征工程的基本概念4.2 FeatureTools庫簡介4.3 關鍵公…

Scikit-learn模型評估全流程解析:從數據劃分到交叉驗證優化

模型評估的步驟、scikit-learn函數及實例說明 1. 數據劃分(Train-Test Split) 函數:train_test_split使用場景:將數據分為訓練集和測試集,避免模型過擬合。作用:確保模型在未見過的數據上驗證性能。示例&…

Spring AI相關的面試題

以下是150道Spring AI相關的面試題目及答案: ### Spring AI基礎概念類 **1. 什么是Spring AI?** Spring AI是Spring框架的擴展,旨在簡化人工智能模型在Java應用中的集成與使用,提供與Spring生態無縫銜接的工具和抽象&#xff0c…

C++ 學習筆記(四)—— 類和對象

1、this指針 class Date { public:void Init(Date* this, int year, int month, int day){this->_year year;this->_month month;this->_day day;this->Print();// 這就是this指針,是編譯器自己加的,是用來讓成員函數找到成…

SpringMVC全局異常處理機制

異常處理機制 異常處理的兩種方式: 編程式異常處理:是指在代碼中顯式地編寫處理異常的邏輯。它通常涉及到對異常類型的檢測及其處理,例如使用 try-catch 塊來捕獲異常,然后在 catch 塊中編寫特定的處理代碼,或者在 f…

深入LangChain:LLM交互機制與RAG集成的技術

本文將聚焦于 LangChain 如何集成檢索增強生成(RAG),了解其架構、主要組件,以及與 LLM 的交互 LangChain 架構概覽 1、基礎層 這是與各類 LLM 對接的 “橋梁”。LangChain 支持多種流行的 LLM,如 OpenAI 的系列模型、H…

本地部署 LangManus

本地部署 LangManus 0. 引言1. 部署 LangManus2. 部署 LangManus Web UI 0. 引言 LangManus 是一個社區驅動的 AI 自動化框架,它建立在開源社區的卓越工作基礎之上。我們的目標是將語言模型與專業工具(如網絡搜索、爬蟲和 Python 代碼執行)相…

SQL注入(SQL Injection)攻擊原理與防御措施

SQL是一種代碼注入技術,可使攻擊者修改應用程序向數據庫提供的查詢。 迄今為止,最常見和最嚴重的應用 程序安全威脅總是隱藏在與數據庫有某些連接的網絡應用 程序中。 通過這種 SQL 注入,攻擊者可以繞過登錄程序,獲取、更改甚至更…

【算法】十大排序算法(含時間復雜度、核心思想)

以下是 **十大經典排序算法** 的時間復雜度、空間復雜度及穩定性總結,適用于面試快速回顧:排序算法對比表 排序算法最佳時間復雜度平均時間復雜度最差時間復雜度空間復雜度穩定性核心思想冒泡排序O(n)O(n)O(n)O(1)穩定相鄰元素交換,大數沉底…

LVS的 NAT 模式實現 3 臺RS的輪詢訪問

使用LVS的 NAT 模式實現 3 臺RS的輪詢訪問 1.配置 RS(NAT模式)2. 配置 LVS 主機(僅主機、NAT模式)2.1 配置僅主機網卡(192.168.66.150/24 VIP )2.2 配置 NAT 網卡(192.168.88.6/24 DIP&#xff…