中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Python中圖片采樣處理的示例分析

發布時間:2022-02-09 11:30:52 來源:億速云 閱讀:350 作者:小新 欄目:開發技術

這篇文章給大家分享的是有關Python中圖片采樣處理的示例分析的內容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。

一.圖像采樣處理原理

圖像采樣(Image Sampling)處理是將一幅連續圖像在空間上分割成M×N個網格,每個網格用一個亮度值或灰度值來表示,其示意圖如圖9-1所示。

Python中圖片采樣處理的示例分析

圖像采樣的間隔越大,所得圖像像素數越少,空間分辨率越低,圖像質量越差,甚至出現馬賽克效應;相反,圖像采樣的間隔越小,所得圖像像素數越多,空間分辨率越高,圖像質量越好,但數據量會相應的增大。圖9-2展示了不同采樣間隔的“Lena”圖,其中圖(a)為原始圖像,圖(b)為128×128的圖像采樣效果,圖©為64×64的圖像采樣效果,圖(d)為32×32的圖像采樣效果,圖(e)為16×16的圖像采樣效果,圖(f)為8×8的圖像采樣效果[1-3]。

Python中圖片采樣處理的示例分析

二.圖像采樣實現

下面講述Python圖像采樣處理相關代碼操作。其核心流程是建立一張臨時圖片,設置需要采樣的區域大小(如16×16),接著循環遍歷原始圖像中所有像素點,采樣區域內的像素點賦值相同(如左上角像素點的灰度值),最終實現圖像采樣處理。

# -*- coding: utf-8 -*-
# By:Eastmount
import cv2  
import numpy as np  
import matplotlib.pyplot as plt

#讀取原始圖像
img = cv2.imread('lena-hd.png')

#獲取圖像高度和寬度
height = img.shape[0]
width = img.shape[1]

#采樣轉換成16*16區域
numHeight = int(height/16)
numWidth = int(width/16)

#創建一幅圖像
new_img = np.zeros((height, width, 3), np.uint8)

#圖像循環采樣16*16區域
for i in range(16):
    #獲取Y坐標
    y = i*numHeight
    for j in range(16):
        #獲取X坐標
        x = j*numWidth
        #獲取填充顏色 左上角像素點
        b = img[y, x][0]
        g = img[y, x][1]
        r = img[y, x][2]
        
        #循環設置小區域采樣
        for n in range(numHeight):
            for m in range(numWidth):
                new_img[y+n, x+m][0] = np.uint8(b)
                new_img[y+n, x+m][1] = np.uint8(g)
                new_img[y+n, x+m][2] = np.uint8(r)
        
#顯示圖像
cv2.imshow("src", img)
cv2.imshow("Sampling", new_img)

#等待顯示
cv2.waitKey(0)
cv2.destroyAllWindows()

其輸出結果如圖9-3所示,它將灰度圖像采樣成16×16的區域。

Python中圖片采樣處理的示例分析

同樣,可以對彩色圖像進行采樣處理,下面的代碼將“小珞珞”的圖像采樣處理成8×8的馬賽克區域。

# -*- coding: utf-8 -*-
# By:Eastmount
import cv2  
import numpy as np  
import matplotlib.pyplot as plt

#讀取原始圖像
img = cv2.imread('luo.png')

#獲取圖像高度和寬度
height = img.shape[0]
width = img.shape[1]

#采樣轉換成8×8區域
numHeight = int(height/8)
numwidth = int(width/8)

#創建一幅圖像
new_img = np.zeros((height, width, 3), np.uint8)

#圖像循環采樣8*8區域
for i in range(8):
    #獲取Y坐標
    y = i*numHeight
    for j in range(8):
        #獲取X坐標
        x = j*numwidth
        #獲取填充顏色 左上角像素點
        b = img[y, x][0]
        g = img[y, x][1]
        r = img[y, x][2]
        
        #循環設置小區域采樣
        for n in range(numHeight):
            for m in range(numwidth):
                new_img[y+n, x+m][0] = np.uint8(b)
                new_img[y+n, x+m][1] = np.uint8(g)
                new_img[y+n, x+m][2] = np.uint8(r)
        
#顯示圖像
cv2.imshow("src", img)
cv2.imshow("Sampling", new_img)

#等待顯示
cv2.waitKey(0)
cv2.destroyAllWindows()

其輸出結果如圖9-4所示,它將彩色圖像采樣成8×8的區域。

Python中圖片采樣處理的示例分析

但上述代碼存在一個問題,當圖像的長度和寬度不能被采樣區域整除時,輸出圖像的最右邊和最下邊的區域沒有被采樣處理。這里推薦讀者做個求余運算,將不能整除部分的區域也進行相應的采樣處理。

三.圖像局部采樣處理

前面講述的代碼是對整幅圖像進行采樣處理,那么如何對圖像的局部區域進行馬賽克處理呢?下面的代碼就實現了該功能。當鼠標按下時,它能夠給鼠標拖動的區域打上馬賽克,并按下“s”鍵保存圖像至本地。

# -*- coding: utf-8 -*-
# By:Eastmount
import cv2  
import numpy as np  
import matplotlib.pyplot as plt

#讀取原始圖像
im = cv2.imread('luo.png', 1)

#設置鼠標左鍵開啟
en = False

#鼠標事件
def draw(event, x, y, flags, param):
    global en
    #鼠標左鍵按下開啟en值
    if event==cv2.EVENT_LBUTTONDOWN:
        en = True
    #鼠標左鍵按下并且移動
    elif event==cv2.EVENT_MOUSEMOVE and flags==cv2.EVENT_LBUTTONDOWN:
        #調用函數打馬賽克
        if en:
            drawMask(y,x)
        #鼠標左鍵彈起結束操作
        elif event==cv2.EVENT_LBUTTONUP:
            en = False
          
#圖像局部采樣操作         
def drawMask(x, y, size=10):
    #size*size采樣處理
    m = int(x / size * size)
    n = int(y / size * size)
    print(m, n)
    #10*10區域設置為同一像素值
    for i in range(size):
        for j in range(size):
            im[m+i][n+j] = im[m][n]

#打開對話框
cv2.namedWindow('image')

#調用draw函數設置鼠標操作
cv2.setMouseCallback('image', draw)

#循環處理
while(1):
    cv2.imshow('image', im)
    #按ESC鍵退出
    if cv2.waitKey(10)&0xFF==27:
        break
    #按s鍵保存圖片
    elif cv2.waitKey(10)&0xFF==115:
        cv2.imwrite('sava.png', im)

#退出窗口
cv2.destroyAllWindows()

其輸出結果如圖9-5所示,它將人物的臉部進行馬賽克處理。

Python中圖片采樣處理的示例分析

感謝各位的閱讀!關于“Python中圖片采樣處理的示例分析”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,讓大家可以學到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

铅山县| 淮安市| 丹东市| 尚义县| 高淳县| 东丰县| 铜川市| 隆尧县| 高台县| 新巴尔虎右旗| 云和县| 亚东县| 嘉禾县| 蒲城县| 肥东县| 重庆市| 固始县| 同仁县| 东辽县| 郓城县| 东兴市| 清远市| 岳普湖县| 江阴市| 成武县| 永嘉县| 菏泽市| 饶河县| 灌云县| 迁西县| 聂拉木县| 亚东县| 伊川县| 沧源| 资阳市| 益阳市| 长子县| 壤塘县| 崇明县| 平安县| 泰兴市|