OpenCV在圖像處理中的應用

OpenCV是一個開源計算機視覺庫,可以讓開發者在Windows、Linux等平台上開發圖像或視頻處理應用程序。它包含了一系列的圖像處理和計算機視覺算法,可以實現圖像識別、人臉檢測、圖像分類、相似圖像搜索等多種功能。

一、基礎圖像處理

1、讀取圖片:OpenCV中常用的圖像格式是BGR(以像素的分量順序為藍(blue)、綠(green)、紅(red)),可以使用cv.imread(‘image.jpg’)命令讀取,返回一個numpy數組。

import cv2 as cv
img = cv.imread('image.jpg')

2、顯示圖片:可以使用cv.imshow(‘image’, img)命令在窗口中顯示圖片。

cv.imshow('image', img)
cv.waitKey(0)
cv.destroyAllWindows()

3、調整圖片大小:可以使用cv.resize(img, (width, height))命令調整圖片大小。

img_sized = cv.resize(img, (600, 400))
cv.imshow('sized image', img_sized)

4、裁剪圖片:可以使用numpy數組對圖像進行裁剪,只需指定圖像的起始點和終點。

img_cropped = img[100:300, 200:400]
cv.imshow('cropped image', img_cropped)

5、旋轉圖片:可以使用cv.getRotationMatrix2D(center, angle, scale)獲取圖像旋轉矩陣,然後使用cv.warpAffine(img, rotation_matrix, (width, height))命令旋轉圖片。

rows, cols, _ = img.shape
rotation_matrix = cv.getRotationMatrix2D((cols/2,rows/2), 45, 1)
img_rotated = cv.warpAffine(img, rotation_matrix, (cols,rows))
cv.imshow('rotated image', img_rotated)

二、圖像濾波與增強

1、模糊處理:可以使用cv.blur(img, kernel_size)進行圖像模糊,其中kernel_size是卷積核的大小。

img_blur = cv.blur(img, (5,5))
cv.imshow('blurred image', img_blur)

2、銳化處理:可以使用cv.filter2D(img, -1, sharpen_kernel)進行圖像銳化處理。

sharpen_kernel = np.array([[-1,-1,-1], [-1,9,-1], [-1,-1,-1]])
img_sharpen = cv.filter2D(img, -1, sharpen_kernel)
cv.imshow('sharpened image', img_sharpen)

3、邊緣檢測:可以使用cv.Canny(img, threshold1, threshold2)進行邊緣檢測,其中threshold1和threshold2是閾值。

img_canny = cv.Canny(img, 100, 200)
cv.imshow('canny image', img_canny)

4、直方圖均衡化:可以使用cv.equalizeHist(img)對圖像進行直方圖均衡化處理。

img_gray = cv.cvtColor(img, cv.COLOR_BGR2GRAY)
img_eq = cv.equalizeHist(img_gray)
cv.imshow('equalized image', img_eq)

三、圖像特徵提取與檢測

1、輪廓檢測:可以使用cv.findContours(img, cv.RETR_TREE, cv.CHAIN_APPROX_SIMPLE)進行輪廓檢測。

img_canny = cv.Canny(img, 100, 200)
contours, hierarchy = cv.findContours(img_canny, cv.RETR_TREE, cv.CHAIN_APPROX_SIMPLE)
cv.drawContours(img, contours, -1, (0,255,0), 2)
cv.imshow('contour image', img)

2、特徵匹配:可以使用cv.matchTemplate(img1, img2, method)進行模板匹配。其中img1是要搜索的圖像,img2是要匹配的圖像,method是匹配算法(如cv.TM_CCOEFF)。

template = cv.imread('template.jpg')
result = cv.matchTemplate(img, template, cv.TM_CCOEFF_NORMED)
min_val, max_val, min_loc, max_loc = cv.minMaxLoc(result)
top_left = max_loc
bottom_right = (top_left[0] + template.shape[1], top_left[1] + template.shape[0])
cv.rectangle(img, top_left, bottom_right, (0, 255, 0), 2)
cv.imshow('matched image', img)

3、人臉檢測:可以使用cv.CascadeClassifier進行人臉檢測。

face_cascade = cv.CascadeClassifier('haarcascade_frontalface_default.xml')
gray = cv.cvtColor(img, cv.COLOR_BGR2GRAY)
faces = face_cascade.detectMultiScale(gray, scaleFactor=1.3, minNeighbors=5)
for (x,y,w,h) in faces:
    cv.rectangle(img, (x,y), (x+w,y+h), (0,255,0), 2)
cv.imshow('face detection', img)

四、圖像處理實戰

1、圖像拼接:可以將多張圖片拼接在一起,形成一張大圖。

img1 = cv.imread('image1.jpg')
img2 = cv.imread('image2.jpg')
img3 = cv.imread('image3.jpg')
img4 = cv.imread('image4.jpg')
img5 = cv.imread('image5.jpg')
img_concat = np.concatenate((img1, img2, img3, img4, img5), axis=0)
cv.imshow('concatenated image', img_concat)

2、視頻處理:可以使用OpenCV進行實時視頻處理,如人臉檢測。

cap = cv.VideoCapture(0)
face_cascade = cv.CascadeClassifier('haarcascade_frontalface_default.xml')

while True:
    ret, frame = cap.read()
    gray = cv.cvtColor(frame, cv.COLOR_BGR2GRAY)
    faces = face_cascade.detectMultiScale(gray, scaleFactor=1.3, minNeighbors=5)
    for (x,y,w,h) in faces:
        cv.rectangle(frame, (x,y), (x+w,y+h), (0,255,0), 2)
    cv.imshow('video', frame)
    
    if cv.waitKey(1) & 0xFF == ord('q'):
        break

cap.release()
cv.destroyAllWindows()

3、二維碼識別:可以使用OpenCV進行二維碼識別。

import cv2 as cv
import numpy as np
import pyzbar.pyzbar as pyzbar

cap = cv.VideoCapture(0)

while True:
    ret, frame = cap.read()
    decoded_objects = pyzbar.decode(frame)
    for obj in decoded_objects:
        cv.putText(frame, str(obj.data), (50, 50), cv.FONT_HERSHEY_SIMPLEX, 1, (0, 255, 0), 2)
    cv.imshow('qrcode', frame)

    if cv.waitKey(1) & 0xFF == ord('q'):
        break

cap.release()
cv.destroyAllWindows()

以上就是OpenCV在圖像處理中的應用的詳細介紹,開發者可以根據自己的需求,選擇相應的算法,實現不同的圖像處理功能。

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

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
YKMQO的頭像YKMQO
上一篇 2025-04-02 01:28
下一篇 2025-04-02 01:28

相關推薦

  • 如何在PyCharm中安裝OpenCV?

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

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

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

    編程 2025-04-29
  • 使用boofcv進行圖像處理和機器視覺

    本文將詳細介紹使用boofcv進行圖像處理和機器視覺的方法和實踐。首先,我們將介紹boofcv的概述和安裝方法,然後分別介紹它的圖像處理、相機校準和機器學習功能。 一、概述和安裝 …

    編程 2025-04-28
  • Opencv 實現讀取 BMP 圖片

    Opencv 是一個基於 C/C++ 語言的開源計算機視覺庫,可以用於圖像處理、特徵識別、目標跟蹤、機器學習等領域。在圖像處理中,讀取 BMP 圖片是常見操作之一。 一、打開 BM…

    編程 2025-04-27
  • opencv鼠標繪圖

    本文將為您詳細介紹如何使用opencv在原始圖片上進行鼠標繪圖。 一、準備工作 在開始繪製之前,您需要先準備好以下的工作: 1、安裝opencv庫,可以通過pip install …

    編程 2025-04-27
  • Matlab局部放大——圖像處理的神器

    一、什麼是Matlab局部放大? Matlab是一個高級技術計算語言和交互式環境,常被用來進行科學計算和工程設計等領域的計算和可視化操作。局部放大指對一張圖像或視頻中感興趣的區域進…

    編程 2025-04-25
  • 深入探討OpenCV版本

    OpenCV是一個用於計算機視覺應用程序的開源庫。它是由英特爾公司創建的,現已由Willow Garage管理。OpenCV旨在提供一個易於使用的計算機視覺和機器學習基礎架構,以實…

    編程 2025-04-25
  • OpenCV的全面介紹

    OpenCV是一款強大的開源計算機視覺庫,它包含了各種用於圖像和視頻處理,圖像識別和機器學習的函數,它可以用於開發實時的計算機視覺軟件和系統,特別適用於圖像處理、物體識別、人臉識別…

    編程 2025-04-25
  • Opencv CUDA編譯用法介紹

    本文將從多個方面對Opencv CUDA編譯進行詳細的闡述和解讀。通過以下小標題,我們將詳細介紹如何進行編譯。 一、環境搭建 在使用CUDA進行加速之前,需要進行CUDA的環境搭建…

    編程 2025-04-25
  • 詳解OpenCV高斯濾波

    一、高斯濾波的介紹 OpenCV高斯濾波是一種平滑圖像的處理方法,通常用於去除噪聲、模糊化圖像等。它的原理是利用高斯函數進行加權平均,從而減少噪聲的干擾。 在圖像處理中,噪聲是一種…

    編程 2025-04-25

發表回復

登錄後才能評論