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