探索OpenCV:從基礎到實踐

一、OpenCV介紹

OpenCV是一款跨平台的計算機視覺庫,它提供了各種各樣的函數,用於圖像、視頻處理和機器學習。OpenCV最初是由英特爾公司開發的,以C++語言編寫而成,但現已得到支持多種編程語言(如Python、Java等)的擴展。

OpenCV生態系統從2.x版本開始就已經被廣泛應用。如今,它常用於人臉檢測、圖像分割、圖像跟蹤等方面,同時也是許多研究人員和工程師的首選。

下面給出一個簡單的例子,展示如何使用OpenCV讀取並顯示圖像。這是OpenCV的入門的第一步——加載圖像。

import cv2 as cv

img = cv.imread('example.jpg', 1)
cv.imshow('image', img)
cv.waitKey(0)
cv.destroyAllWindows()

代碼中,cv2.imread函數可以讀取一張圖像,並以numpy數組的形式存儲。其中,1表示讀取為彩色圖像,0表示讀取為灰度圖像;’example.jpg’表示要讀取的圖像路徑。

cv.imshow函數可用於顯示圖像,第一個參數指定窗口名字,第二個參數指定要顯示的圖像。cv.waitKey函數則等待特定時間(以毫秒計)來查看是否有任何鍵盤事件,如果按下任何按鍵,則返回鍵的ASCII值,否則返回-1。cv.destroyAllWindows函數清除所有高GUI窗口。

二、基本圖像處理

OpenCV提供的基礎函數使得圖像處理變得更加簡單。下面我們看看一些最常用的圖像處理函數。

1. 圖像調整

import cv2 as cv

img = cv.imread('example.jpg', 1)

# 縮小一倍
img_resized = cv.resize(img,(int(img.shape[1]/2), int(img.shape[0]/2)))
cv.imshow('resized', img_resized)

# 水平翻轉
img_flipped = cv.flip(img, 1)
cv.imshow('flipped', img_flipped)

# 調整亮度
M = np.ones(img.shape, dtype='uint8') * 75
img_bright = cv.add(img, M)
cv.imshow('bright', img_bright)

cv.waitKey(0)
cv.destroyAllWindows()

代碼中,cv.resize函數可以縮小或放大圖像,第一個參數指定要改變的圖像,第二個參數為新圖片的width和height。cv.flip函數可以水平、垂直或水平垂直翻轉圖片,第一個參數是要翻轉的圖像,第二個參數是指定翻轉類型。

圖像的對比度和亮度可以用add函數來調整,M為輸入圖像,表示要強制增加的每個像素的值。OpenCV允許使用numpy來操作每個像素。

2. 圖像濾波

import cv2 as cv
import numpy as np

img = cv.imread('example.jpg', 1)

# 高斯濾波
img_blur = cv.GaussianBlur(img, (5,5), 0)
cv.imshow('blur', img_blur)

# 中值濾波
img_median = cv.medianBlur(img, 5)
cv.imshow('median', img_median)

# 邊緣檢測
img_gray = cv.cvtColor(img, cv.COLOR_BGR2GRAY)
img_edges = cv.Canny(img_gray, 50, 150)
cv.imshow('edges', img_edges)

cv.waitKey(0)
cv.destroyAllWindows()

代碼中,cv.GaussianBlur函數實現高斯濾波,第一個參數為輸入圖像,第二個參數是一個元組ksize,表示內核大小。第三個參數是標準差,為0時表示自動計算。cv.medianBlur函數實現中值濾波,第一個參數為輸入圖像,第二個參數為內核大小。cv.Canny函數用於自動的邊緣檢測策略,第一個參數是輸入圖像,後兩個參數的閾值大小和比率。

三、實際應用

下面是一個實際應用的例子:簡單的人臉檢測。

首先需要下載並導入計算機視覺庫Dlib和OpenCV。

!pip install dlib

以下是人臉檢測的代碼示例

import cv2
import dlib

detector = dlib.get_frontal_face_detector()

# 加載圖片
img = cv2.imread('example.jpg', 1)
img_rgb = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)

# 人臉檢測
faces = detector(img_rgb)

# 框出人臉
for face in faces:
    x1, y1 = face.left(), face.top()
    x2, y2 = face.right(), face.bottom()
    cv2.rectangle(img, (x1, y1), (x2, y2), (0, 255, 0), 10)

# 顯示結果
cv2.imshow('result', img)
cv2.waitKey(0)
cv2.destroyAllWindows()

代碼中,首先使用dlib.get_frontal_face_detector()函數創建一個默認的人臉檢測器。然後加載一張圖片,並將其轉換為RGB格式。接着使用detector函數檢測人臉,結果將存儲在一個list中。最後,使用cv2.rectangle函數將人臉框起來。

總結

本文通過介紹OpenCV基本功能以及實際應用,對其功能進行了詳細的闡述,希望可以幫助讀者更好地了解和使用OpenCV。

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/284662.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-22 15:41
下一篇 2024-12-22 15:41

相關推薦

  • 如何在PyCharm中安裝OpenCV?

    本文將從以下幾個方面詳細介紹如何在PyCharm中安裝OpenCV。 一、安裝Python 在安裝OpenCV之前,請確保已經安裝了Python。 如果您還沒有安裝Python,可…

    編程 2025-04-29
  • Python基礎代碼用法介紹

    本文將從多個方面對Python基礎代碼進行解析和詳細闡述,力求讓讀者深刻理解Python基礎代碼。通過本文的學習,相信大家對Python的學習和應用會更加輕鬆和高效。 一、變量和數…

    編程 2025-04-29
  • Python OpenCV 直線檢測

    本文將介紹在Python OpenCV中進行直線檢測的方法,主要涉及到圖像的邊緣檢測、霍夫變換和繪製直線等操作。 一、邊緣檢測 由於直線檢測是從圖像的邊緣開始的,因此必須先找到圖像…

    編程 2025-04-29
  • 數據結構與算法基礎青島大學PPT解析

    本文將從多個方面對數據結構與算法基礎青島大學PPT進行詳細的闡述,包括數據類型、集合類型、排序算法、字符串匹配和動態規劃等內容。通過對這些內容的解析,讀者可以更好地了解數據結構與算…

    編程 2025-04-29
  • Python零基礎PDF下載

    本文將為大家介紹如何使用Python下載PDF文件,適合初學者上手實踐。 一、安裝必要的庫 在Python中,我們需要使用urllib和requests庫來獲取PDF文件的鏈接,並…

    編程 2025-04-29
  • 樹莓派DIY無人機一:製作基礎

    本文將介紹如何使用樹莓派製作一個可飛行的小型無人機。本文將介紹樹莓派的選型、比例積木的使用、無線電通信以及如何控制飛行器的基本運動。 一、樹莓派的選型 在DIY無人機中,樹莓派是必…

    編程 2025-04-29
  • Polyphone音頻編輯器基礎入門教程

    Polyphone是一款免費的音頻編輯器,可用於編輯.sf2和.sfz格式的音色庫。本文將詳細介紹Polyphone的基礎操作及使用方法。 一、安裝和簡介 首先,我們需要下載並安裝…

    編程 2025-04-29
  • Python語言設計基礎第2版PDF

    Python語言設計基礎第2版PDF是一本介紹Python編程語言的經典教材。本篇文章將從多個方面對該教材進行詳細的闡述和介紹。 一、基礎知識 本教材中介紹了Python編程語言的…

    編程 2025-04-28
  • Python基礎語言

    Python作為一種高級編程語言擁有簡潔優雅的語法。在本文中,我們將從多個方面探究Python基礎語言的特點以及使用技巧。 一、數據類型 Python基礎數據類型包括整數、浮點數、…

    編程 2025-04-28
  • 鍵值存儲(kvs):從基礎概念到實戰應用

    本文將從基礎概念入手,介紹鍵值存儲(kvs)的概念、原理以及實戰應用,並給出代碼實現。通過閱讀本文,您將了解鍵值存儲的優缺點,如何選擇最適合的鍵值存儲方案,以及如何使用鍵值存儲解決…

    編程 2025-04-28

發表回復

登錄後才能評論