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

Python中OpenCV與Matplotlib的圖像操作入門指南

 更新時(shí)間:2025年06月01日 16:29:08   作者:小米玄戒Andrew  
這篇文章主要介紹了Python中OpenCV與Matplotlib的圖像操作指南,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧

在這里插入圖片描述

一、環(huán)境準(zhǔn)備

import cv2
import numpy as np
import matplotlib.pyplot as plt
# 配置中文字體顯示(可選)
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False

二、圖像的基本操作

1. 圖像讀取、顯示與保存 使用OpenCV操作

# 讀取圖像(支持多種格式)
img = cv2.imread('example.jpg')
print(f"圖像尺寸: {img.shape}")  # 輸出:(高度, 寬度, 通道數(shù))
# 顯示圖像
cv2.imshow('OpenCV Window', img)
cv2.waitKey(0)  # 等待按鍵
cv2.destroyAllWindows()
# 保存圖像
cv2.imwrite('output.jpg', img)  # 自動(dòng)保存為JPG格式

使用Matplotlib操作

# 讀取并顯示圖像
plt.figure(figsize=(10,5))
img_plt = plt.imread('example.png')  # 自動(dòng)歸一化到[0,1]
plt.subplot(121)
plt.imshow(img_plt)
plt.title('Matplotlib顯示')
# OpenCV與Matplotlib顏色空間差異
img_rgb = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)  # BGR轉(zhuǎn)RGB
plt.subplot(122)
plt.imshow(img_rgb)
plt.title('OpenCV轉(zhuǎn)RGB顯示')
plt.show()

?? 注意事項(xiàng):

OpenCV讀取的像素值范圍是[0,255],Matplotlib自動(dòng)歸一化到[0,1]路徑含中文時(shí)需使用cv2.imdecode特殊處理保存質(zhì)量可通過(guò)參數(shù)控制(如cv2.imwrite('out.jpg', img, [int(cv2.IMWRITE_JPEG_QUALITY), 90])

2. 像素級(jí)操作

單個(gè)像素訪問(wèn)與修改

# 訪問(wèn)特定位置像素值
px = img[100, 50]  # 獲取坐標(biāo)(50,100)處像素值
print(f"Blue={px[0]}, Green={px[1]}, Red={px[2]}")
# 修改像素值
img[100, 50] = [0, 255, 0]  # 將該位置改為綠色

區(qū)域像素操作

# 提取ROI區(qū)域(感興趣區(qū)域)
roi = img[50:150, 100:200]
# 批量修改像素值
img[200:300, 300:400] = [0, 0, 255]  # 填充紅色矩形

像素值統(tǒng)計(jì)分析

print(f"最大像素值: {img.max()}")
print(f"最小像素值: {img.min()}")
print(f"平均像素值: {img.mean()}")

3. 通道操作

通道分離與合并

# 分離通道(OpenCV方式)
b, g, r = cv2.split(img)
cv2.imshow('Blue Channel', b)
# 合并通道
merged = cv2.merge([b, g, r])
# 直接操作特定通道(Numpy方式)
img_copy = img.copy()
img_copy[:, :, 0] = 0  # 清空藍(lán)色通道

多光譜分析示例

# 顯示各通道灰度圖
plt.figure(figsize=(12, 3))
for i, ch in enumerate(['Blue', 'Green', 'Red']):
    plt.subplot(1,3,i+1)
    plt.imshow(cv2.split(img)[i], cmap='gray')
    plt.title(f'{ch}通道')
    plt.axis('off')
plt.show()

三、完整實(shí)踐案例

def image_processing_pipeline(path):
    # 1. 圖像讀取
    src = cv2.imread(path)
    if src is None:
        print("錯(cuò)誤:無(wú)法讀取圖像!")
        return
    # 2. 通道分析
    b, g, r = cv2.split(src)
    # 3. 創(chuàng)建特殊效果
    special_effect = src.copy()
    special_effect[:, :, 1] = cv2.add(special_effect[:, :, 1], 50)  # 增強(qiáng)綠色通道
    # 4. 結(jié)果展示
    plt.figure(figsize=(15, 5))
    plt.subplot(141)
    plt.imshow(cv2.cvtColor(src, cv2.COLOR_BGR2RGB))
    plt.title('原圖')
    plt.subplot(142)
    plt.imshow(r, cmap='gray')
    plt.title('紅色通道')
    plt.subplot(143)
    plt.imshow(special_effect[:, :, [2,1,0]])
    plt.title('增強(qiáng)綠色通道')
    plt.subplot(144)
    plt.imshow(b, cmap='viridis')  # 使用不同色圖
    plt.title('藍(lán)色通道(Viridis色圖)')
    plt.tight_layout()
    plt.show()
# 執(zhí)行處理流程
image_processing_pipeline('test_image.jpg')

四、性能優(yōu)化技巧

向量化操作替代循環(huán)

# 推薦方式(Numpy向量化)
start_time = cv2.getTickCount()
brighter = cv2.add(img, np.array([30]))
print(f"耗時(shí):{(cv2.getTickCount() - start_time)/cv2.getTickFrequency():.4f}s")
# 不推薦方式(雙重循環(huán))
start_time = cv2.getTickCount()
for y in range(img.shape[0]):
    for x in range(img.shape[1]):
        img[y,x] = np.clip(img[y,x] + 30, 0, 255)
print(f"耗時(shí):{(cv2.getTickCount() - start_time)/cv2.getTickFrequency():.4f}s")

內(nèi)存連續(xù)性優(yōu)化

# 檢查數(shù)組內(nèi)存布局
if not img.flags.c_contiguous:
    img = np.ascontiguousarray(img)

五、常見問(wèn)題解決方案

圖像無(wú)法顯示

  • 檢查路徑是否包含中文/特殊字符
  • 確認(rèn)圖像尺寸是否超過(guò)屏幕分辨率
  • 嘗試使用cv2.resizeWindow()調(diào)整窗口大小

顏色顯示異常

# 統(tǒng)一顏色空間轉(zhuǎn)換
def show_image統(tǒng)一(img_bgr, title='Image'):
    plt.imshow(cv2.cvtColor(img_bgr, cv2.COLOR_BGR2RGB))
    plt.title(title)
    plt.axis('off')
    plt.show()

大圖像處理

# 金字塔下采樣
pyramid = cv2.pyrDown(img)
print(f"下采樣后尺寸:{pyramid.shape}")

六、擴(kuò)展學(xué)習(xí)方向

進(jìn)階操作

  • 使用cv2.LUT()實(shí)現(xiàn)色彩查找表變換
  • 掩膜操作(mask)進(jìn)行區(qū)域處理
  • 利用Numpy數(shù)組的布爾索引進(jìn)行條件修改

性能提升

  • 使用OpenCV內(nèi)置函數(shù)替代Python循環(huán)
  • 多線程處理圖像塊
  • CUDA加速(需安裝opencv-contrib-python包)

實(shí)際應(yīng)用

  • 圖像增強(qiáng):直方圖均衡化、CLAHE算法
  • 顏色空間轉(zhuǎn)換:HSV/YUV等
  • 形態(tài)學(xué)操作:腐蝕、膨脹

通過(guò)掌握這些基礎(chǔ)操作,您將為后續(xù)的圖像處理學(xué)習(xí)打下堅(jiān)實(shí)基礎(chǔ)。建議通過(guò)實(shí)際項(xiàng)目(如證件照背景替換、圖像特效制作)加深理解。

下一篇我們將進(jìn)入圖像的「幾何變換世界」,學(xué)習(xí)如何用數(shù)學(xué)矩陣實(shí)現(xiàn)圖像的平移、旋轉(zhuǎn)、縮放,以及不同插值算法對(duì)圖像質(zhì)量的影響?,F(xiàn)在請(qǐng)打開你的圖像,嘗試裁剪一個(gè)有趣的ROI區(qū)域并修改它的顏色吧!

思考:為什么對(duì)大尺寸圖像使用cv2.split()會(huì)更耗內(nèi)存?如何用NumPy實(shí)現(xiàn)更高效的通道分離?

到此這篇關(guān)于Python中OpenCV與Matplotlib的圖像操作指南的文章就介紹到這了,更多相關(guān)Python OpenCV與Matplotlib圖像內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評(píng)論