?
《小白入門: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做一些小的圖像處理項目呢?或者在使用過程中遇到了什么問題呢?歡迎在評論區留言討論哦。
?
?