欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python圖像處理必備技巧分享

 更新時(shí)間:2025年05月21日 08:29:40   作者:小白菜卡卡  
本文系統(tǒng)梳理了Python圖像處理的15項(xiàng)核心技能,涵蓋圖像讀取、顏色轉(zhuǎn)換、濾波、邊緣檢測(cè)、形態(tài)學(xué)操作、特征提取、分割、變換等關(guān)鍵技術(shù),強(qiáng)調(diào)這些基礎(chǔ)技能的組合應(yīng)用可實(shí)現(xiàn)復(fù)雜圖像處理任務(wù),需要的朋友可以參考下

下面為你介紹Python圖像處理時(shí)需要掌握的15個(gè)基本技能:

1. 圖像讀取與保存

借助OpenCV、Pillow(PIL)或者M(jìn)atplotlib庫(kù),能夠讀取和保存各類(lèi)格式的圖像文件。

import cv2
from PIL import Image
import matplotlib.pyplot as plt

# OpenCV讀取與保存
img_cv = cv2.imread('image.jpg')  # BGR格式
cv2.imwrite('output.jpg', img_cv)

# Pillow讀取與保存
img_pil = Image.open('image.jpg')
img_pil.save('output.jpg')

# Matplotlib讀取與顯示
img_plt = plt.imread('image.jpg')
plt.imshow(img_plt)

2. 圖像顏色空間轉(zhuǎn)換

能夠在RGB、BGR、HSV、灰度等不同顏色空間之間進(jìn)行轉(zhuǎn)換。

# BGR轉(zhuǎn)RGB
img_rgb = cv2.cvtColor(img_cv, cv2.COLOR_BGR2RGB)

# BGR轉(zhuǎn)灰度
img_gray = cv2.cvtColor(img_cv, cv2.COLOR_BGR2GRAY)

# RGB轉(zhuǎn)HSV
import numpy as np
hsv_img = cv2.cvtColor(img_cv, cv2.COLOR_BGR2HSV)

3. 圖像裁剪與調(diào)整大小

可以對(duì)圖像進(jìn)行裁剪、調(diào)整尺寸、縮放以及旋轉(zhuǎn)等操作。

# 裁剪
cropped = img_cv[100:300, 200:400]  # 裁剪[y1:y2, x1:x2]

# 調(diào)整大小
resized = cv2.resize(img_cv, (500, 300))  # 指定寬高
resized = cv2.resize(img_cv, None, fx=0.5, fy=0.5)  # 按比例縮放

# 旋轉(zhuǎn)
rows, cols = img_cv.shape[:2]
M = cv2.getRotationMatrix2D((cols/2, rows/2), 90, 1)
rotated = cv2.warpAffine(img_cv, M, (cols, rows))

4. 圖像濾波與平滑

可應(yīng)用各種濾波器來(lái)減少噪聲或者對(duì)圖像進(jìn)行平滑處理。

# 高斯模糊
blur = cv2.GaussianBlur(img_cv, (5, 5), 0)

# 中值濾波(適用于椒鹽噪聲)
median = cv2.medianBlur(img_cv, 5)

# 雙邊濾波(保留邊緣)
bilateral = cv2.bilateralFilter(img_cv, 9, 75, 75)

5. 邊緣檢測(cè)

能檢測(cè)圖像中的邊緣,常見(jiàn)的有Canny邊緣檢測(cè)和Sobel算子。

# Canny邊緣檢測(cè)
edges = cv2.Canny(img_gray, 100, 200)

# Sobel邊緣檢測(cè)
sobelx = cv2.Sobel(img_gray, cv2.CV_64F, 1, 0, ksize=3)
sobely = cv2.Sobel(img_gray, cv2.CV_64F, 0, 1, ksize=3)
edges = np.sqrt(sobelx**2 + sobely**2)

6. 閾值處理

通過(guò)設(shè)定閾值,將圖像轉(zhuǎn)換為二值圖像。

# 簡(jiǎn)單閾值
ret, thresh = cv2.threshold(img_gray, 127, 255, cv2.THRESH_BINARY)

# 自適應(yīng)閾值
thresh = cv2.adaptiveThreshold(img_gray, 255, 
                               cv2.ADAPTIVE_THRESH_GAUSSIAN_C,
                               cv2.THRESH_BINARY, 11, 2)

# Otsu閾值
ret, thresh = cv2.threshold(img_gray, 0, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU)

7. 形態(tài)學(xué)操作

包括膨脹、腐蝕、開(kāi)運(yùn)算和閉運(yùn)算等形態(tài)學(xué)操作。

# 定義結(jié)構(gòu)元素
kernel = np.ones((5,5), np.uint8)

# 腐蝕
erosion = cv2.erode(img_gray, kernel, iterations=1)

# 膨脹
dilation = cv2.dilate(img_gray, kernel, iterations=1)

# 開(kāi)運(yùn)算(先腐蝕后膨脹)
opening = cv2.morphologyEx(img_gray, cv2.MORPH_OPEN, kernel)

# 閉運(yùn)算(先膨脹后腐蝕)
closing = cv2.morphologyEx(img_gray, cv2.MORPH_CLOSE, kernel)

8. 直方圖處理

可以計(jì)算和顯示圖像的直方圖,還能進(jìn)行直方圖均衡化以增強(qiáng)對(duì)比度。

# 計(jì)算直方圖
hist = cv2.calcHist([img_gray], [0], None, [256], [0, 256])

# 直方圖均衡化
equ = cv2.equalizeHist(img_gray)

# 自適應(yīng)直方圖均衡化
clahe = cv2.createCLAHE(clipLimit=2.0, tileGridSize=(8,8))
cl1 = clahe.apply(img_gray)

9. 特征檢測(cè)與描述

能夠檢測(cè)圖像中的關(guān)鍵點(diǎn)并提取特征描述符,如SIFT、SURF、ORB等。

# ORB特征檢測(cè)
orb = cv2.ORB_create()
keypoints, descriptors = orb.detectAndCompute(img_gray, None)

# 繪制關(guān)鍵點(diǎn)
img_kp = cv2.drawKeypoints(img_gray, keypoints, None, color=(0,255,0), flags=0)

# SIFT特征檢測(cè)(需要安裝opencv-contrib-python)
sift = cv2.SIFT_create()
keypoints, descriptors = sift.detectAndCompute(img_gray, None)

10. 圖像配準(zhǔn)與特征匹配

可以匹配不同圖像間的特征點(diǎn),進(jìn)而實(shí)現(xiàn)圖像對(duì)齊。

# 特征匹配
bf = cv2.BFMatcher(cv2.NORM_HAMMING, crossCheck=True)
matches = bf.match(des1, des2)
matches = sorted(matches, key=lambda x: x.distance)

# 單應(yīng)性矩陣估計(jì)與圖像配準(zhǔn)
src_pts = np.float32([ kp1[m.queryIdx].pt for m in matches ]).reshape(-1,1,2)
dst_pts = np.float32([ kp2[m.trainIdx].pt for m in matches ]).reshape(-1,1,2)
H, _ = cv2.findHomography(src_pts, dst_pts, cv2.RANSAC, 5.0)
aligned = cv2.warpPerspective(img1, H, (img2.shape[1], img2.shape[0]))

11. 輪廓檢測(cè)與分析

能夠檢測(cè)圖像中的輪廓,并計(jì)算輪廓的面積、周長(zhǎng)等參數(shù)。

# 輪廓檢測(cè)
contours, hierarchy = cv2.findContours(thresh, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)

# 繪制輪廓
img_contours = img_cv.copy()
cv2.drawContours(img_contours, contours, -1, (0,255,0), 3)

# 輪廓分析
cnt = contours[0]
area = cv2.contourArea(cnt)
perimeter = cv2.arcLength(cnt, True)

12. 圖像分割

可將圖像分割為不同的區(qū)域,如使用GrabCut或 watershed算法。

# GrabCut分割
mask = np.zeros(img_cv.shape[:2], np.uint8)
bgdModel = np.zeros((1,65), np.float64)
fgdModel = np.zeros((1,65), np.float64)
rect = (50,50,450,290)  # ROI區(qū)域
cv2.grabCut(img_cv, mask, rect, bgdModel, fgdModel, 5, cv2.GC_INIT_WITH_RECT)
mask2 = np.where((mask==2)|(mask==0),0,1).astype('uint8')
img_seg = img_cv*mask2[:,:,np.newaxis]

# Watershed分割
ret, thresh = cv2.threshold(img_gray, 0, 255, cv2.THRESH_BINARY_INV + cv2.THRESH_OTSU)
kernel = np.ones((3,3), np.uint8)
opening = cv2.morphologyEx(thresh, cv2.MORPH_OPEN, kernel, iterations=2)
sure_bg = cv2.dilate(opening, kernel, iterations=3)
dist_transform = cv2.distanceTransform(opening, cv2.DIST_L2, 5)
ret, sure_fg = cv2.threshold(dist_transform, 0.7*dist_transform.max(), 255, 0)
unknown = cv2.subtract(sure_bg, sure_fg)

13. 模板匹配

可以在圖像中查找特定的模板。

template = cv2.imread('template.jpg', 0)
h, w = template.shape[:2]

# 模板匹配
res = cv2.matchTemplate(img_gray, template, cv2.TM_CCOEFF_NORMED)
min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(res)

# 獲取匹配位置并繪制矩形
top_left = max_loc
bottom_right = (top_left[0] + w, top_left[1] + h)
cv2.rectangle(img_cv, top_left, bottom_right, 255, 2)

14. 透 視變換與仿射變換

能夠?qū)D像進(jìn)行透 視校正和仿射變換。

# 透 視變換
pts1 = np.float32([[56,65],[368,52],[28,387],[389,390]])
pts2 = np.float32([[0,0],[300,0],[0,300],[300,300]])
M = cv2.getPerspectiveTransform(pts1, pts2)
dst = cv2.warpPerspective(img_cv, M, (300, 300))

# 仿射變換
pts1 = np.float32([[50,50],[200,50],[50,200]])
pts2 = np.float32([[10,100],[200,50],[100,250]])
M = cv2.getAffineTransform(pts1, pts2)
dst = cv2.warpAffine(img_cv, M, (cols, rows))

15. 傅里葉變換

可用于頻域分析和濾波。

# 傅里葉變換
f = np.fft.fft2(img_gray)
fshift = np.fft.fftshift(f)
magnitude_spectrum = 20*np.log(np.abs(fshift))

# 逆傅里葉變換
rows, cols = img_gray.shape
crow, ccol = rows//2, cols//2
fshift[crow-30:crow+30, ccol-30:ccol+30] = 0  # 低通濾波
f_ishift = np.fft.ifftshift(fshift)
img_back = np.fft.ifft2(f_ishift)
img_back = np.abs(img_back)

以上這些技能都是Python圖像處理的基礎(chǔ),你可以根據(jù)具體需求進(jìn)行拓展和組合使用。

到此這篇關(guān)于Python圖像處理必備技巧分享的文章就介紹到這了,更多相關(guān)Python圖像處理內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 在Django中創(chuàng)建自己的自定義用戶(hù)模型

    在Django中創(chuàng)建自己的自定義用戶(hù)模型

    這篇文章主要介紹了在Django中創(chuàng)建自己的自定義用戶(hù)模型,創(chuàng)建自己的自定義用戶(hù)模型至關(guān)重要。將來(lái),如果要對(duì)模型進(jìn)行一些更改,則可以輕松進(jìn)行這些更改。不然我們可能必須對(duì)模型進(jìn)行一些更改,而且代碼的某些部分也將被更改,下面一起進(jìn)入文章里哦阿姐個(gè)表格的詳細(xì)內(nèi)容吧
    2022-01-01
  • python機(jī)器學(xué)習(xí)使數(shù)據(jù)更鮮活的可視化工具Pandas_Alive

    python機(jī)器學(xué)習(xí)使數(shù)據(jù)更鮮活的可視化工具Pandas_Alive

    今天我分享大家一款非常棒的動(dòng)畫(huà)可視化工具:Pandas_Alive,它以?matplotlib?繪圖為后端,不僅可以創(chuàng)建出令人驚嘆的動(dòng)畫(huà)可視化,而且使用方法非常簡(jiǎn)單。本文詳情如下
    2021-11-11
  • python switch 實(shí)現(xiàn)多分支選擇功能

    python switch 實(shí)現(xiàn)多分支選擇功能

    這篇文章主要介紹了python switch 實(shí)現(xiàn)多分支選擇功能,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-12-12
  • python中使用urllib2獲取http請(qǐng)求狀態(tài)碼的代碼例子

    python中使用urllib2獲取http請(qǐng)求狀態(tài)碼的代碼例子

    這篇文章主要介紹了python中使用urllib2獲取http請(qǐng)求狀態(tài)碼的代碼例子,需要的朋友可以參考下
    2014-07-07
  • Python中的getattr、__getattr__、__getattribute__、__get__詳解

    Python中的getattr、__getattr__、__getattribute__、__get__詳解

    這篇文章主要為大家介紹了Python中的getattr,__getattr__,__getattribute__和__get__,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助
    2021-12-12
  • Python如何實(shí)現(xiàn)同時(shí)進(jìn)行多個(gè)瀏覽器注入

    Python如何實(shí)現(xiàn)同時(shí)進(jìn)行多個(gè)瀏覽器注入

    瀏覽器注入是一種技術(shù),允許我們?cè)谶\(yùn)行中的瀏覽器進(jìn)程中注入代碼,以便執(zhí)行特定的任務(wù),下面我們就來(lái)看看Python如何實(shí)現(xiàn)同時(shí)進(jìn)行多個(gè)瀏覽器注入吧
    2025-03-03
  • Python 確定多項(xiàng)式擬合/回歸的階數(shù)實(shí)例

    Python 確定多項(xiàng)式擬合/回歸的階數(shù)實(shí)例

    今天小編就為大家分享一篇Python 確定多項(xiàng)式擬合/回歸的階數(shù)實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-12-12
  • 詳解如何利用Python制作24點(diǎn)小游戲

    詳解如何利用Python制作24點(diǎn)小游戲

    這篇文章主要為大家詳細(xì)介紹了如何通過(guò)Python制作24點(diǎn)小游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • python中的Json模塊dumps、dump、loads、load函數(shù)用法詳解

    python中的Json模塊dumps、dump、loads、load函數(shù)用法詳解

    這篇文章主要介紹了python中的Json模塊dumps、dump、loads、load函數(shù)用法講解,本文逐一介紹結(jié)合實(shí)例代碼給大家講解的非常詳細(xì),需要的朋友可以參考下
    2022-11-11
  • python使用多線(xiàn)程備份數(shù)據(jù)庫(kù)的步驟

    python使用多線(xiàn)程備份數(shù)據(jù)庫(kù)的步驟

    在日常服務(wù)器運(yùn)維工作中,備份數(shù)據(jù)庫(kù)是必不可少的,剛工作那會(huì)看到公司都是用shell腳本循環(huán)備份數(shù)據(jù)庫(kù),到現(xiàn)在自己學(xué)習(xí)python語(yǔ)言后,利用多進(jìn)程多線(xiàn)程相關(guān)技術(shù)來(lái)實(shí)現(xiàn)并行備份數(shù)據(jù)庫(kù),充分利用服務(wù)器資源,提高備份速度。
    2021-05-05

最新評(píng)論