最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python圖片處理之圖片采樣處理詳解

 更新時(shí)間:2022年02月08日 08:56:01   作者:Eastmount  
這篇文章將詳細(xì)為大家講解圖像采樣處理,包括原理知識(shí)、代碼實(shí)現(xiàn)和局部馬賽克處理。文中的示例代碼講解詳細(xì),感興趣的可以跟隨小編一起動(dòng)手試一試

一.圖像采樣處理原理

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

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

二.圖像采樣實(shí)現(xiàn)

下面講述Python圖像采樣處理相關(guān)代碼操作。其核心流程是建立一張臨時(shí)圖片,設(shè)置需要采樣的區(qū)域大?。ㄈ?6×16),接著循環(huán)遍歷原始圖像中所有像素點(diǎn),采樣區(qū)域內(nèi)的像素點(diǎn)賦值相同(如左上角像素點(diǎn)的灰度值),最終實(shí)現(xiàn)圖像采樣處理。

# -*- 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]

#采樣轉(zhuǎn)換成16*16區(qū)域
numHeight = int(height/16)
numWidth = int(width/16)

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

#圖像循環(huán)采樣16*16區(qū)域
for i in range(16):
    #獲取Y坐標(biāo)
    y = i*numHeight
    for j in range(16):
        #獲取X坐標(biāo)
        x = j*numWidth
        #獲取填充顏色 左上角像素點(diǎn)
        b = img[y, x][0]
        g = img[y, x][1]
        r = img[y, x][2]
        
        #循環(huán)設(shè)置小區(qū)域采樣
        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()

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

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

# -*- 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]

#采樣轉(zhuǎn)換成8×8區(qū)域
numHeight = int(height/8)
numwidth = int(width/8)

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

#圖像循環(huán)采樣8*8區(qū)域
for i in range(8):
    #獲取Y坐標(biāo)
    y = i*numHeight
    for j in range(8):
        #獲取X坐標(biāo)
        x = j*numwidth
        #獲取填充顏色 左上角像素點(diǎn)
        b = img[y, x][0]
        g = img[y, x][1]
        r = img[y, x][2]
        
        #循環(huán)設(shè)置小區(qū)域采樣
        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()

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

但上述代碼存在一個(gè)問題,當(dāng)圖像的長(zhǎng)度和寬度不能被采樣區(qū)域整除時(shí),輸出圖像的最右邊和最下邊的區(qū)域沒有被采樣處理。這里推薦讀者做個(gè)求余運(yùn)算,將不能整除部分的區(qū)域也進(jìn)行相應(yīng)的采樣處理。

三.圖像局部采樣處理

前面講述的代碼是對(duì)整幅圖像進(jìn)行采樣處理,那么如何對(duì)圖像的局部區(qū)域進(jìn)行馬賽克處理呢?下面的代碼就實(shí)現(xiàn)了該功能。當(dāng)鼠標(biāo)按下時(shí),它能夠給鼠標(biāo)拖動(dòng)的區(qū)域打上馬賽克,并按下“s”鍵保存圖像至本地。

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

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

#設(shè)置鼠標(biāo)左鍵開啟
en = False

#鼠標(biāo)事件
def draw(event, x, y, flags, param):
    global en
    #鼠標(biāo)左鍵按下開啟en值
    if event==cv2.EVENT_LBUTTONDOWN:
        en = True
    #鼠標(biāo)左鍵按下并且移動(dòng)
    elif event==cv2.EVENT_MOUSEMOVE and flags==cv2.EVENT_LBUTTONDOWN:
        #調(diào)用函數(shù)打馬賽克
        if en:
            drawMask(y,x)
        #鼠標(biāo)左鍵彈起結(jié)束操作
        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區(qū)域設(shè)置為同一像素值
    for i in range(size):
        for j in range(size):
            im[m+i][n+j] = im[m][n]

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

#調(diào)用draw函數(shù)設(shè)置鼠標(biāo)操作
cv2.setMouseCallback('image', draw)

#循環(huán)處理
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()

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

四.總結(jié)

本文主要講解了圖像的采樣處理,從基本概念到操作,再到擴(kuò)展進(jìn)行全方位講解,并且補(bǔ)充了局部馬賽克采樣處理案例。該部分的知識(shí)點(diǎn)能夠?qū)⑸钪械膱D像轉(zhuǎn)換為數(shù)字圖像,更好地為后續(xù)的圖像處理提供幫助。

以上就是Python圖片處理之圖片采樣處理詳解的詳細(xì)內(nèi)容,更多關(guān)于Python圖片采樣處理的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • PyCharm 2020 激活到 2100 年的教程

    PyCharm 2020 激活到 2100 年的教程

    這篇文章主要介紹了PyCharm 2020 激活到 2100 年,本文圖文并茂給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-03-03
  • Python對(duì)切片命名的實(shí)現(xiàn)方法

    Python對(duì)切片命名的實(shí)現(xiàn)方法

    在本篇文章里我們給大家分享了關(guān)于Python對(duì)切片命名的實(shí)現(xiàn)方法的相關(guān)知識(shí)點(diǎn)內(nèi)容,有需要的朋友們學(xué)習(xí)下。
    2018-10-10
  • Python+Qt身體特征識(shí)別人數(shù)統(tǒng)計(jì)源碼窗體程序(使用步驟)

    Python+Qt身體特征識(shí)別人數(shù)統(tǒng)計(jì)源碼窗體程序(使用步驟)

    這篇文章主要介紹了Python+Qt身體特征識(shí)別人數(shù)統(tǒng)計(jì)源碼窗體程序(使用步驟),本文通過示例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-12-12
  • python計(jì)算列表內(nèi)各元素的個(gè)數(shù)實(shí)例

    python計(jì)算列表內(nèi)各元素的個(gè)數(shù)實(shí)例

    今天小編就為大家分享一篇python計(jì)算列表內(nèi)各元素的個(gè)數(shù)實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來(lái)看看吧
    2018-06-06
  • Python實(shí)現(xiàn)迪杰斯特拉算法過程解析

    Python實(shí)現(xiàn)迪杰斯特拉算法過程解析

    這篇文章主要介紹了Python實(shí)現(xiàn)迪杰斯特拉算法過程解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-09-09
  • python中執(zhí)行smtplib失敗的處理方法

    python中執(zhí)行smtplib失敗的處理方法

    在本篇文章里小編給大家整理了關(guān)于python中執(zhí)行smtplib失敗的處理方法,對(duì)此有需要的朋友們可以學(xué)習(xí)下。
    2020-07-07
  • Python實(shí)現(xiàn)返回?cái)?shù)組中第i小元素的方法示例

    Python實(shí)現(xiàn)返回?cái)?shù)組中第i小元素的方法示例

    這篇文章主要介紹了Python實(shí)現(xiàn)返回?cái)?shù)組中第i小元素的方法,結(jié)合實(shí)例形式分析了Python針對(duì)數(shù)組的遍歷、排序、運(yùn)算等相關(guān)操作技巧,需要的朋友可以參考下
    2017-12-12
  • 對(duì)YOLOv3模型調(diào)用時(shí)候的python接口詳解

    對(duì)YOLOv3模型調(diào)用時(shí)候的python接口詳解

    今天小編就為大家分享一篇對(duì)YOLOv3模型調(diào)用時(shí)候的python接口詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來(lái)看看吧
    2019-08-08
  • python去掉空格的一些常用方式

    python去掉空格的一些常用方式

    處理字符串時(shí)經(jīng)常要定制化去掉無(wú)用的空格,python 中要么用存在的常規(guī)方法,或者用正則處理,下面這篇文章主要給大家介紹了python去掉空格的一些常用方式,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-01-01
  • 詳解PyQt5信號(hào)與槽的幾種高級(jí)玩法

    詳解PyQt5信號(hào)與槽的幾種高級(jí)玩法

    這篇文章主要介紹了詳解PyQt5信號(hào)與槽的幾種高級(jí)玩法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-03-03

最新評(píng)論

五指山市| 拜泉县| 深泽县| 久治县| 河源市| 元谋县| 孟村| 商河县| 垫江县| 高要市| 古丈县| 清远市| 茶陵县| 定安县| 湘乡市| 东明县| 武穴市| 贵溪市| 万载县| 盐边县| 枣阳市| 龙游县| 五大连池市| 新乡县| 遂昌县| 文化| 大厂| 潼南县| 广丰县| 徐州市| 贵南县| 广元市| 沈阳市| 佛坪县| 五大连池市| 栖霞市| 克山县| 林口县| 江津市| 龙井市| 炉霍县|