国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

首頁 後端開發(fā) Python教學(xué) [Python-CV影像分割:Canny邊緣、分水嶺和K-Means方法

[Python-CV影像分割:Canny邊緣、分水嶺和K-Means方法

Dec 11, 2024 am 05:33 AM

分割是影像分析中的基本技術(shù),它允許我們根據(jù)物件、形狀或顏色將影像劃分為有意義的部分。它在物體檢測(cè)、電腦視覺甚至藝術(shù)圖像處理等應(yīng)用中發(fā)揮關(guān)鍵作用。但如何才能有效實(shí)現(xiàn)細(xì)分呢?幸運(yùn)的是,OpenCV (cv2) 提供了幾種用戶友好且強(qiáng)大的分割方法。

在本教學(xué)中,我們將探討三種流行的分割技術(shù):

  • Canny 邊緣偵測(cè) – 非常適合勾畫物體輪廓。
  • 分水嶺演算法 – 非常適合分離重疊區(qū)域。
  • K-Means 顏色分割 – 非常適合將影像中的相似顏色進(jìn)行聚類。

為了使本教程引人入勝且實(shí)用,我們將使用來自日本大阪的衛(wèi)星和航空?qǐng)D像,重點(diǎn)關(guān)注古代古墳。您可以從教學(xué)的 GitHub 頁面下載這些圖像和相應(yīng)的範(fàn)例筆記本。

Canny 邊緣偵測(cè)到輪廓分割

Canny 邊緣偵測(cè)是一種簡(jiǎn)單且強(qiáng)大的方法來辨識(shí)影像中的邊緣。它的工作原理是檢測(cè)強(qiáng)度快速變化的區(qū)域,這些區(qū)域通常是物體的邊界。該技術(shù)透過應(yīng)用強(qiáng)度閾值來產(chǎn)生“薄邊緣”輪廓。讓我們深入了解它使用 OpenCV 的實(shí)作。

範(fàn)例:偵測(cè)衛(wèi)星影像中的邊緣
在這裡,我們使用大阪的衛(wèi)星圖像,特別是古墳,作為測(cè)試案例。

import cv2 
import numpy as np
import matplotlib.pyplot as plt
files = sorted(glob("SAT*.png")) #Get png files 
print(len(files))
img=cv2.imread(files[0])
use_image= img[0:600,700:1300]
gray = cv2.cvtColor(use_image, cv2.COLOR_BGR2GRAY)

#Stadard values 
min_val = 100
max_val = 200
# Apply Canny Edge Detection
edges = cv2.Canny(gray, min_val, max_val)
#edges = cv2.Canny(gray, min_val, max_val,apertureSize=5,L2gradient = True )
False
# Show the result
plt.figure(figsize=(15, 5))
plt.subplot(131), plt.imshow(cv2.cvtColor(use_image, cv2.COLOR_BGR2RGB))
plt.title('Original Image'), plt.axis('off')
plt.subplot(132), plt.imshow(gray, cmap='gray')
plt.title('Grayscale Image'), plt.axis('off')
plt.subplot(133), plt.imshow(edges, cmap='gray')
plt.title('Canny Edges'), plt.axis('off')
plt.show()

[Python-CVImage Segmentation : Canny Edges, Watershed, and K-Means Methods

輸出邊緣清晰地勾勒出古墳和其他感興趣區(qū)域的部分輪廓。然而,由於閾值過大,一些區(qū)域被遺漏了。結(jié)果在很大程度上取決於 min_val 和 max_val 的選擇以及影像品質(zhì)。

為了增強(qiáng)邊緣偵測(cè),我們可以對(duì)影像進(jìn)行預(yù)處理以分散像素強(qiáng)度並減少雜訊。這可以使用直方圖均衡 (cv2.equalizeHist()) 和高斯模糊 (cv2.GaussianBlur()) 來實(shí)現(xiàn)。

use_image= img[0:600,700:1300]
gray = cv2.cvtColor(use_image, cv2.COLOR_BGR2GRAY)
gray_og = gray.copy()
gray = cv2.equalizeHist(gray)
gray = cv2.GaussianBlur(gray, (9, 9),1)

plt.figure(figsize=(15, 5))
plt.subplot(121), plt.imshow(gray, cmap='gray')
plt.title('Grayscale Image')
plt.subplot(122)
_= plt.hist(gray.ravel(), 256, [0,256],label="Equalized") 
_ = plt.hist(gray_og.ravel(), 256, [0,256],label="Original",histtype='step')
plt.legend()
plt.title('Grayscale Histogram')

[Python-CVImage Segmentation : Canny Edges, Watershed, and K-Means Methods

這種預(yù)處理可以均勻強(qiáng)度分佈並平滑影像,這有助於 Canny 邊緣偵測(cè)演算法捕捉更有意義的邊緣。

邊緣很有用,但它們僅表示邊界。為了分割封閉區(qū)域,我們將邊緣轉(zhuǎn)換為輪廓並視覺化它們。

# Edges to contours 
contours, hierarchy = cv2.findContours(edges, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
# Calculate contour areas
areas = [cv2.contourArea(contour) for contour in contours]

# Normalize areas for the colormap
normalized_areas = np.array(areas)
if normalized_areas.max() > 0:
    normalized_areas = normalized_areas / normalized_areas.max()

# Create a colormap
cmap = plt.cm.jet

# Plot the contours with the color map
plt.figure(figsize=(10, 10))
plt.subplot(1,2,1)
plt.imshow(gray, cmap='gray', alpha=0.5)  # Display the grayscale image in the background
mask = np.zeros_like(use_image)
for contour, norm_area in zip(contours, normalized_areas):
    color = cmap(norm_area)  # Map the normalized area to a color
    color = [int(c*255) for c in color[:3]]
    cv2.drawContours(mask, [contour], -1, color,-1 )  # Draw contours on the image

plt.subplot(1,2,2)

[Python-CVImage Segmentation : Canny Edges, Watershed, and K-Means Methods

上述方法以代表其相對(duì)區(qū)域的顏色突出顯示檢測(cè)到的輪廓。這種視覺化有助於驗(yàn)證輪廓是否形成封閉體或僅形成線條。然而,在此範(fàn)例中,許多輪廓仍然是未閉合的多邊形。進(jìn)一步的預(yù)處理或參數(shù)調(diào)整可以解決這些限制。

透過結(jié)合預(yù)處理和輪廓分析,Canny 邊緣偵測(cè)成為辨識(shí)影像中物件邊界的強(qiáng)大工具。然而,當(dāng)物件定義明確且噪音最小時(shí),它的效果最佳。接下來,我們將探索 K 均值聚類以按顏色分割影像,從而為相同資料提供不同的視角。

K均值聚類

K-Means 聚類是資料科學(xué)中一種流行的方法,用於將相似的項(xiàng)目分組為聚類,並且它對(duì)於基於顏色相似性的圖像分割特別有效。 OpenCV 的 cv2.kmeans 函數(shù)簡(jiǎn)化了此過程,使其可以執(zhí)行物件分割、背景移除或視覺分析等任務(wù)。

在本節(jié)中,我們將使用 K 均值聚類將古墳?zāi)褂跋穹指顬橄嗨祁伾膮^(qū)域。

首先,我們對(duì)影像的 RGB 值套用 K 均值聚類,將每個(gè)像素視為一個(gè)資料點(diǎn)。

import cv2 
import numpy as np
import matplotlib.pyplot as plt
files = sorted(glob("SAT*.png")) #Get png files 
print(len(files))
img=cv2.imread(files[0])
use_image= img[0:600,700:1300]
gray = cv2.cvtColor(use_image, cv2.COLOR_BGR2GRAY)

#Stadard values 
min_val = 100
max_val = 200
# Apply Canny Edge Detection
edges = cv2.Canny(gray, min_val, max_val)
#edges = cv2.Canny(gray, min_val, max_val,apertureSize=5,L2gradient = True )
False
# Show the result
plt.figure(figsize=(15, 5))
plt.subplot(131), plt.imshow(cv2.cvtColor(use_image, cv2.COLOR_BGR2RGB))
plt.title('Original Image'), plt.axis('off')
plt.subplot(132), plt.imshow(gray, cmap='gray')
plt.title('Grayscale Image'), plt.axis('off')
plt.subplot(133), plt.imshow(edges, cmap='gray')
plt.title('Canny Edges'), plt.axis('off')
plt.show()

[Python-CVImage Segmentation : Canny Edges, Watershed, and K-Means Methods

在分割影像中,古墳和周圍區(qū)域聚集成不同的顏色。然而,噪音和顏色的微小變化會(huì)導(dǎo)致簇分散,這會(huì)為解釋帶來挑戰(zhàn)。

為了減少噪音並創(chuàng)建更平滑的聚類,我們可以在運(yùn)行 K-Means 之前應(yīng)用中位數(shù)模糊。

use_image= img[0:600,700:1300]
gray = cv2.cvtColor(use_image, cv2.COLOR_BGR2GRAY)
gray_og = gray.copy()
gray = cv2.equalizeHist(gray)
gray = cv2.GaussianBlur(gray, (9, 9),1)

plt.figure(figsize=(15, 5))
plt.subplot(121), plt.imshow(gray, cmap='gray')
plt.title('Grayscale Image')
plt.subplot(122)
_= plt.hist(gray.ravel(), 256, [0,256],label="Equalized") 
_ = plt.hist(gray_og.ravel(), 256, [0,256],label="Original",histtype='step')
plt.legend()
plt.title('Grayscale Histogram')

[Python-CVImage Segmentation : Canny Edges, Watershed, and K-Means Methods

模糊的影像會(huì)產(chǎn)生更平滑的簇,減少噪音並使分割區(qū)域在視覺上更具凝聚力。

為了更好地理解分割結(jié)果,我們可以使用 matplotlib plt.fill_ Between;
建立獨(dú)特簇顏色的顏色圖

# Edges to contours 
contours, hierarchy = cv2.findContours(edges, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
# Calculate contour areas
areas = [cv2.contourArea(contour) for contour in contours]

# Normalize areas for the colormap
normalized_areas = np.array(areas)
if normalized_areas.max() > 0:
    normalized_areas = normalized_areas / normalized_areas.max()

# Create a colormap
cmap = plt.cm.jet

# Plot the contours with the color map
plt.figure(figsize=(10, 10))
plt.subplot(1,2,1)
plt.imshow(gray, cmap='gray', alpha=0.5)  # Display the grayscale image in the background
mask = np.zeros_like(use_image)
for contour, norm_area in zip(contours, normalized_areas):
    color = cmap(norm_area)  # Map the normalized area to a color
    color = [int(c*255) for c in color[:3]]
    cv2.drawContours(mask, [contour], -1, color,-1 )  # Draw contours on the image

plt.subplot(1,2,2)

[Python-CVImage Segmentation : Canny Edges, Watershed, and K-Means Methods

這種視覺化可以深入了解影像中的主色及其對(duì)應(yīng)的 RGB 值,這對(duì)於進(jìn)一步分析非常有用。因?yàn)槲覀儸F(xiàn)在可以屏蔽並選擇我的顏色代碼區(qū)域。

簇的數(shù)量 (K) 顯著影響結(jié)果。增加 K 會(huì)創(chuàng)建更詳細(xì)的細(xì)分,而較低的值會(huì)產(chǎn)生更廣泛的分組。為了進(jìn)行實(shí)驗(yàn),我們可以迭代多個(gè) K 值。

import cv2 
import numpy as np
import matplotlib.pyplot as plt
files = sorted(glob("SAT*.png")) #Get png files 
print(len(files))
img=cv2.imread(files[0])
use_image= img[0:600,700:1300]
gray = cv2.cvtColor(use_image, cv2.COLOR_BGR2GRAY)

#Stadard values 
min_val = 100
max_val = 200
# Apply Canny Edge Detection
edges = cv2.Canny(gray, min_val, max_val)
#edges = cv2.Canny(gray, min_val, max_val,apertureSize=5,L2gradient = True )
False
# Show the result
plt.figure(figsize=(15, 5))
plt.subplot(131), plt.imshow(cv2.cvtColor(use_image, cv2.COLOR_BGR2RGB))
plt.title('Original Image'), plt.axis('off')
plt.subplot(132), plt.imshow(gray, cmap='gray')
plt.title('Grayscale Image'), plt.axis('off')
plt.subplot(133), plt.imshow(edges, cmap='gray')
plt.title('Canny Edges'), plt.axis('off')
plt.show()

[Python-CVImage Segmentation : Canny Edges, Watershed, and K-Means Methods

不同 K 值的聚類結(jié)果揭示了細(xì)節(jié)和簡(jiǎn)單性之間的權(quán)衡:

?較低的 K 值(例如 2-3):聚類範(fàn)圍廣泛,區(qū)分清晰,適合高階分割。
?較高的 K 值(例如 12-15):更詳細(xì)的分割,但代價(jià)是增加複雜性和潛在的過度分割。

K-Means 聚類是一種基於色彩相似性分割影像的強(qiáng)大技術(shù)。透過正確的預(yù)處理步驟,它可以產(chǎn)生清晰且有意義的區(qū)域。然而,其性能取決於 K 的選擇、輸入影像的品質(zhì)以及所應(yīng)用的預(yù)處理。接下來,我們將探索分水嶺演算法,該演算法利用地形特徵來實(shí)現(xiàn)物件和區(qū)域的精確分割。

分水嶺分割

分水嶺演算法的靈感來自地形圖,其中分水嶺劃分流域。此方法將灰階強(qiáng)度值視為高程,有效地創(chuàng)建“峰”和“谷”。透過識(shí)別感興趣區(qū)域,該演算法可以分割具有精確邊界的物件。它對(duì)於分離重疊物件特別有用,使其成為細(xì)胞分割、物件偵測(cè)和區(qū)分密集特徵等複雜場(chǎng)景的絕佳選擇。

第一步是預(yù)處理影像以增強(qiáng)特徵,然後應(yīng)用分水嶺演算法。

use_image= img[0:600,700:1300]
gray = cv2.cvtColor(use_image, cv2.COLOR_BGR2GRAY)
gray_og = gray.copy()
gray = cv2.equalizeHist(gray)
gray = cv2.GaussianBlur(gray, (9, 9),1)

plt.figure(figsize=(15, 5))
plt.subplot(121), plt.imshow(gray, cmap='gray')
plt.title('Grayscale Image')
plt.subplot(122)
_= plt.hist(gray.ravel(), 256, [0,256],label="Equalized") 
_ = plt.hist(gray_og.ravel(), 256, [0,256],label="Original",histtype='step')
plt.legend()
plt.title('Grayscale Histogram')

分段區(qū)域和邊界可以與中間處理步驟一起視覺化。

[Python-CVImage Segmentation : Canny Edges, Watershed, and K-Means Methods

# Edges to contours 
contours, hierarchy = cv2.findContours(edges, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
# Calculate contour areas
areas = [cv2.contourArea(contour) for contour in contours]

# Normalize areas for the colormap
normalized_areas = np.array(areas)
if normalized_areas.max() > 0:
    normalized_areas = normalized_areas / normalized_areas.max()

# Create a colormap
cmap = plt.cm.jet

# Plot the contours with the color map
plt.figure(figsize=(10, 10))
plt.subplot(1,2,1)
plt.imshow(gray, cmap='gray', alpha=0.5)  # Display the grayscale image in the background
mask = np.zeros_like(use_image)
for contour, norm_area in zip(contours, normalized_areas):
    color = cmap(norm_area)  # Map the normalized area to a color
    color = [int(c*255) for c in color[:3]]
    cv2.drawContours(mask, [contour], -1, color,-1 )  # Draw contours on the image

plt.subplot(1,2,2)

演算法成功辨識(shí)不同的區(qū)域並在物件周圍繪製清晰的邊界。在本例中,古墳被精確分割。然而,此演算法的性能在很大程度上取決於閾值處理、噪音去除和形態(tài)學(xué)操作等預(yù)處理步驟。

加入進(jìn)階預(yù)處理,例如直方圖均衡或自適應(yīng)模糊,可以進(jìn)一步增強(qiáng)結(jié)果。例如:

# Kmean color segmentation
use_image= img[0:600,700:1300]
#use_image = cv2.medianBlur(use_image, 15)


 # Reshape image for k-means
pixel_values = use_image.reshape((-1, 3)) if len(use_image.shape) == 3 else use_image.reshape((-1, 1))
pixel_values = np.float32(pixel_values)

criteria = (cv2.TERM_CRITERIA_EPS + cv2.TERM_CRITERIA_MAX_ITER, 10, 1.0)
K = 3
attempts=10
ret,label,center=cv2.kmeans(pixel_values,K,None,criteria,attempts,cv2.KMEANS_PP_CENTERS)

centers = np.uint8(center)
segmented_data = centers[label.flatten()]
segmented_image = segmented_data.reshape(use_image.shape)

plt.figure(figsize=(10, 6))
plt.subplot(1,2,1),plt.imshow(use_image[:,:,::-1])
plt.title("RGB View")
plt.subplot(1,2,2),plt.imshow(segmented_image[:,:,[2,1,0]])
plt.title(f"Kmean Segmented Image K={K}")

[Python-CVImage Segmentation : Canny Edges, Watershed, and K-Means Methods
透過這些調(diào)整,可以準(zhǔn)確分割更多區(qū)域,並最大限度地減少雜訊偽影。

分水嶺演算法在需要精確邊界劃分和重疊物件分離的場(chǎng)景中表現(xiàn)出色。透過利用預(yù)處理技術(shù),它甚至可以有效地處理像古墳古墳區(qū)域這樣的複雜圖像。然而,它的成功取決於仔細(xì)的參數(shù)調(diào)整和預(yù)處理。

結(jié)論

分割是影像分析中的重要工具,提供了隔離和理解影像中不同元素的途徑。本教學(xué)展示了三種強(qiáng)大的分割技術(shù):Canny 邊緣偵測(cè)、K 均值聚類和分水嶺演算法,每種技術(shù)都是針對(duì)特定應(yīng)用程式量身定制的。從勾勒出大阪古古墳的輪廓,到聚類城市景觀和劃分不同區(qū)域,這些方法凸顯了 OpenCV 在應(yīng)對(duì)現(xiàn)實(shí)世界挑戰(zhàn)方面的多功能性。

現(xiàn)在去將其中的一些方法應(yīng)用到您選擇的應(yīng)用程式中,並發(fā)表評(píng)論並分享結(jié)果。另外,如果您知道任何其他簡(jiǎn)單的分割方法,也請(qǐng)分享

以上是[Python-CV影像分割:Canny邊緣、分水嶺和K-Means方法的詳細(xì)內(nèi)容。更多資訊請(qǐng)關(guān)注PHP中文網(wǎng)其他相關(guān)文章!

本網(wǎng)站聲明
本文內(nèi)容由網(wǎng)友自願(yuàn)投稿,版權(quán)歸原作者所有。本站不承擔(dān)相應(yīng)的法律責(zé)任。如發(fā)現(xiàn)涉嫌抄襲或侵權(quán)的內(nèi)容,請(qǐng)聯(lián)絡(luò)admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費(fèi)脫衣圖片

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅(qū)動(dòng)的應(yīng)用程序,用於創(chuàng)建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費(fèi)的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費(fèi)的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強(qiáng)大的PHP整合開發(fā)環(huán)境

Dreamweaver CS6

Dreamweaver CS6

視覺化網(wǎng)頁開發(fā)工具

SublimeText3 Mac版

SublimeText3 Mac版

神級(jí)程式碼編輯軟體(SublimeText3)

Python類中的多態(tài)性 Python類中的多態(tài)性 Jul 05, 2025 am 02:58 AM

多態(tài)是Python面向?qū)ο缶幊讨械暮诵母拍?,指“一種接口,多種實(shí)現(xiàn)”,允許統(tǒng)一處理不同類型的對(duì)象。 1.多態(tài)通過方法重寫實(shí)現(xiàn),子類可重新定義父類方法,如Animal類的speak()方法在Dog和Cat子類中有不同實(shí)現(xiàn)。 2.多態(tài)的實(shí)際用途包括簡(jiǎn)化代碼結(jié)構(gòu)、增強(qiáng)可擴(kuò)展性,例如圖形繪製程序中統(tǒng)一調(diào)用draw()方法,或遊戲開發(fā)中處理不同角色的共同行為。 3.Python實(shí)現(xiàn)多態(tài)需滿足:父類定義方法,子類重寫該方法,但不要求繼承同一父類,只要對(duì)象實(shí)現(xiàn)相同方法即可,這稱為“鴨子類型”。 4.注意事項(xiàng)包括保持方

我如何寫一個(gè)簡(jiǎn)單的'你好,世界!” Python的程序? 我如何寫一個(gè)簡(jiǎn)單的'你好,世界!” Python的程序? Jun 24, 2025 am 12:45 AM

"Hello,World!"程序是用Python編寫的最基礎(chǔ)示例,用於展示基本語法並驗(yàn)證開發(fā)環(huán)境是否正確配置。 1.它通過一行代碼print("Hello,World!")實(shí)現(xiàn),運(yùn)行後會(huì)在控制臺(tái)輸出指定文本;2.運(yùn)行步驟包括安裝Python、使用文本編輯器編寫代碼、保存為.py文件、在終端執(zhí)行該文件;3.常見錯(cuò)誤有遺漏括號(hào)或引號(hào)、誤用大寫Print、未保存為.py格式以及運(yùn)行環(huán)境錯(cuò)誤;4.可選工具包括本地文本編輯器 終端、在線編輯器(如replit.com)

Python中的算法是什麼?為什麼它們很重要? Python中的算法是什麼?為什麼它們很重要? Jun 24, 2025 am 12:43 AM

AlgorithmsinPythonareessentialforefficientproblem-solvinginprogramming.Theyarestep-by-stepproceduresusedtosolvetaskslikesorting,searching,anddatamanipulation.Commontypesincludesortingalgorithmslikequicksort,searchingalgorithmslikebinarysearch,andgrap

什麼是python的列表切片? 什麼是python的列表切片? Jun 29, 2025 am 02:15 AM

ListslicinginPythonextractsaportionofalistusingindices.1.Itusesthesyntaxlist[start:end:step],wherestartisinclusive,endisexclusive,andstepdefinestheinterval.2.Ifstartorendareomitted,Pythondefaultstothebeginningorendofthelist.3.Commonusesincludegetting

python`@classmethod'裝飾師解釋了 python`@classmethod'裝飾師解釋了 Jul 04, 2025 am 03:26 AM

類方法是Python中通過@classmethod裝飾器定義的方法,其第一個(gè)參數(shù)為類本身(cls),用於訪問或修改類狀態(tài)。它可通過類或?qū)嵗{(diào)用,影響的是整個(gè)類而非特定實(shí)例;例如在Person類中,show_count()方法統(tǒng)計(jì)創(chuàng)建的對(duì)像數(shù)量;定義類方法時(shí)需使用@classmethod裝飾器並將首參命名為cls,如change_var(new_value)方法可修改類變量;類方法與實(shí)例方法(self參數(shù))、靜態(tài)方法(無自動(dòng)參數(shù))不同,適用於工廠方法、替代構(gòu)造函數(shù)及管理類變量等場(chǎng)景;常見用途包括從

Python函數(shù)參數(shù)和參數(shù) Python函數(shù)參數(shù)和參數(shù) Jul 04, 2025 am 03:26 AM

參數(shù)(parameters)是定義函數(shù)時(shí)的佔(zhàn)位符,而傳參(arguments)是調(diào)用時(shí)傳入的具體值。 1.位置參數(shù)需按順序傳遞,順序錯(cuò)誤會(huì)導(dǎo)致結(jié)果錯(cuò)誤;2.關(guān)鍵字參數(shù)通過參數(shù)名指定,可改變順序且提高可讀性;3.默認(rèn)參數(shù)值在定義時(shí)賦值,避免重複代碼,但應(yīng)避免使用可變對(duì)像作為默認(rèn)值;4.args和*kwargs可處理不定數(shù)量的參數(shù),適用於通用接口或裝飾器,但應(yīng)謹(jǐn)慎使用以保持可讀性。

如何使用CSV模塊在Python中使用CSV文件? 如何使用CSV模塊在Python中使用CSV文件? Jun 25, 2025 am 01:03 AM

Python的csv模塊提供了讀寫CSV文件的簡(jiǎn)單方法。 1.讀取CSV文件時(shí),可使用csv.reader()逐行讀取,並將每行數(shù)據(jù)作為字符串列表返回;若需通過列名訪問數(shù)據(jù),則可用csv.DictReader(),它將每行映射為字典。 2.寫入CSV文件時(shí),使用csv.writer()並調(diào)用writerow()或writerows()方法寫入單行或多行數(shù)據(jù);若要寫入字典數(shù)據(jù),則使用csv.DictWriter(),需先定義列名並通過writeheader()寫入表頭。 3.處理邊緣情況時(shí),模塊自動(dòng)處理

解釋Python發(fā)電機(jī)和迭代器。 解釋Python發(fā)電機(jī)和迭代器。 Jul 05, 2025 am 02:55 AM

迭代器是實(shí)現(xiàn)__iter__()和__next__()方法的對(duì)象,生成器是簡(jiǎn)化版的迭代器,通過yield關(guān)鍵字自動(dòng)實(shí)現(xiàn)這些方法。 1.迭代器每次調(diào)用next()返回一個(gè)元素,無更多元素時(shí)拋出StopIteration異常。 2.生成器通過函數(shù)定義,使用yield按需生成數(shù)據(jù),節(jié)省內(nèi)存且支持無限序列。 3.處理已有集合時(shí)用迭代器,動(dòng)態(tài)生成大數(shù)據(jù)或需惰性求值時(shí)用生成器,如讀取大文件時(shí)逐行加載。注意:列表等可迭代對(duì)像不是迭代器,迭代器到盡頭後需重新創(chuàng)建,生成器只能遍歷一次。

See all articles