天天看點

Python中的圖像處理(第六章)Python圖像量化及采樣處理(1)前言一. Python準備二. Python仿真三. 小結

Python中的圖像處理(第六章)Python圖像量化及采樣處理(1)

  • 前言
  • 一. Python準備
  • 二. Python仿真
  • 三. 小結

前言

随着人工智能研究的不斷興起,Python的應用也在不斷上升,由于Python語言的簡潔性、易讀性以及可擴充性,特别是在開源工具和深度學習方向中各種神經網絡的應用,使得Python已經成為最受歡迎的程式設計語言之一。由于完全開源,加上簡單易學、易讀、易維護、以及其可移植性、解釋性、可擴充性、可擴充性、可嵌入性:豐富的庫等等,自己在學習與工作中也時常接觸到Python,這個系列文章的話主要就是介紹一些在Python中常用一些例程進行仿真示範!

本系列文章主要參考楊秀章老師分享的代碼資源,楊老師部落格首頁是Eastmount,楊老師興趣廣泛,不愧是令人膜拜的大佬,他過成了我理想中的樣子,希望以後有機會可以向他請教學習交流。

因為自己是做圖像語音出身的,是以結合《Python中的圖像處理》,學習一下Python,OpenCV已經在Python上進行了多個版本的維護,是以相比VS,Python的環境配置相對簡單,缺什麼庫直接安裝即可。本系列文章例程都是基于Python3.8的環境下進行,是以大家在進行借鑒的時候建議最好在3.8.0版本以上進行仿真。本文繼續來對本書第六章的前5個例程進行介紹。

一. Python準備

如何确定自己安裝好了python

win+R輸入cmd進入指令行程式

Python中的圖像處理(第六章)Python圖像量化及采樣處理(1)前言一. Python準備二. Python仿真三. 小結

點選“确定”

Python中的圖像處理(第六章)Python圖像量化及采樣處理(1)前言一. Python準備二. Python仿真三. 小結

輸入:python,回車

Python中的圖像處理(第六章)Python圖像量化及采樣處理(1)前言一. Python準備二. Python仿真三. 小結

看到Python相關的版本資訊,說明Python安裝成功。

二. Python仿真

(1)建立一個chapter06_01.py檔案,輸入以下代碼,圖檔也放在與.py檔案同級檔案夾下

# -*- coding: utf-8 -*-
# BY:Eastmount CSDN 2020-11-10
import cv2  
import numpy as np  
import matplotlib.pyplot as plt

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

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

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

#圖像量化操作 量化等級為2
for i in range(height):
    for j in range(width):
        for k in range(3): #對應BGR三分量
            if img[i, j][k] < 128:
                gray = 0
            else:
                gray = 128
            new_img[i, j][k] = np.uint8(gray)
        
#顯示圖像
cv2.imshow("src", img)
cv2.imshow("Quantization", new_img)

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

儲存.py檔案

輸入eixt()退出python,輸入指令行進入工程檔案目錄

Python中的圖像處理(第六章)Python圖像量化及采樣處理(1)前言一. Python準備二. Python仿真三. 小結

輸入以下指令,跑起工程

python chapter06_01.py
           
Python中的圖像處理(第六章)Python圖像量化及采樣處理(1)前言一. Python準備二. Python仿真三. 小結

沒有報錯,直接彈出圖檔,運作成功!

Python中的圖像處理(第六章)Python圖像量化及采樣處理(1)前言一. Python準備二. Python仿真三. 小結
Python中的圖像處理(第六章)Python圖像量化及采樣處理(1)前言一. Python準備二. Python仿真三. 小結

(2)建立一個chapter06_02.py檔案,輸入以下代碼,圖檔也放在與.py檔案同級檔案夾下

# -*- coding: utf-8 -*-
# BY:Eastmount CSDN 2020-11-10
import cv2  
import numpy as np  
import matplotlib.pyplot as plt

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

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

#建立一幅圖像
new_img1 = np.zeros((height, width, 3), np.uint8)
new_img2 = np.zeros((height, width, 3), np.uint8)
new_img3 = np.zeros((height, width, 3), np.uint8)

#圖像量化等級為2的量化處理
for i in range(height):
    for j in range(width):
        for k in range(3): #對應BGR三分量
            if img[i, j][k] < 128:
                gray = 0
            else:
                gray = 128
            new_img1[i, j][k] = np.uint8(gray)

#圖像量化等級為4的量化處理
for i in range(height):
    for j in range(width):
        for k in range(3): #對應BGR三分量
            if img[i, j][k] < 64:
                gray = 0
            elif img[i, j][k] < 128:
                gray = 64
            elif img[i, j][k] < 192:
                gray = 128
            else:
                gray = 192
            new_img2[i, j][k] = np.uint8(gray)

#圖像量化等級為8的量化處理
for i in range(height):
    for j in range(width):
        for k in range(3): #對應BGR三分量
            if img[i, j][k] < 32:
                gray = 0
            elif img[i, j][k] < 64:
                gray = 32
            elif img[i, j][k] < 96:
                gray = 64
            elif img[i, j][k] < 128:
                gray = 96
            elif img[i, j][k] < 160:
                gray = 128
            elif img[i, j][k] < 192:
                gray = 160
            elif img[i, j][k] < 224:
                gray = 192
            else:
                gray = 224
            new_img3[i, j][k] = np.uint8(gray)

#用來正常顯示中文标簽
plt.rcParams['font.sans-serif']=['SimHei']

#顯示圖像
titles = ['(a) 原始圖像', '(b) 量化-L2', '(c) 量化-L4', '(d) 量化-L8']  
images = [img, new_img1, new_img2, new_img3]  
for i in range(4):  
   plt.subplot(2,2,i+1), plt.imshow(images[i], 'gray'), 
   plt.title(titles[i])  
   plt.xticks([]),plt.yticks([])  
plt.show()


           

儲存.py檔案輸入以下指令,跑起工程

python chapter06_02.py
           
Python中的圖像處理(第六章)Python圖像量化及采樣處理(1)前言一. Python準備二. Python仿真三. 小結

沒有報錯,直接彈出圖檔,運作成功!

Python中的圖像處理(第六章)Python圖像量化及采樣處理(1)前言一. Python準備二. Python仿真三. 小結

(3)建立一個chapter06_03.py檔案,輸入以下代碼,圖檔也放在與.py檔案同級檔案夾下

# coding: utf-8
# BY:Eastmount CSDN 2020-11-10
import cv2
import numpy as np
import matplotlib.pyplot as plt

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

#圖像二維像素轉換為一維
data = img.reshape((-1,3))
data = np.float32(data)

#定義中心 (type,max_iter,epsilon)
criteria = (cv2.TERM_CRITERIA_EPS +
            cv2.TERM_CRITERIA_MAX_ITER, 10, 1.0)

#設定标簽
flags = cv2.KMEANS_RANDOM_CENTERS

#K-Means聚類 聚內建4類
compactness, labels, centers = cv2.kmeans(data, 4, None, criteria, 10, flags)


#圖像轉換回uint8二維類型
centers = np.uint8(centers)
res = centers[labels.flatten()]
dst = res.reshape((img.shape))

#圖像轉換為RGB顯示
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
dst = cv2.cvtColor(dst, cv2.COLOR_BGR2RGB)


#用來正常顯示中文标簽
plt.rcParams['font.sans-serif']=['SimHei']

#顯示圖像
titles = ['原始圖像', '聚類量化 K=4']  
images = [img, dst]  
for i in range(2):  
   plt.subplot(1,2,i+1), plt.imshow(images[i], 'gray'), 
   plt.title(titles[i])  
   plt.xticks([]),plt.yticks([])  
plt.show()

           

儲存.py檔案輸入以下指令,跑起工程

python chapter06_03.py
           
Python中的圖像處理(第六章)Python圖像量化及采樣處理(1)前言一. Python準備二. Python仿真三. 小結

沒有報錯,直接彈出圖檔,運作成功!

Python中的圖像處理(第六章)Python圖像量化及采樣處理(1)前言一. Python準備二. Python仿真三. 小結

(4)建立一個chapter06_04.py檔案,輸入以下代碼,圖檔也放在與.py檔案同級檔案夾下

# -*- coding: utf-8 -*-
# BY:Eastmount CSDN 2020-11-10
import cv2  
import numpy as np  
import matplotlib.pyplot as plt

#讀取原始圖像
img = cv2.imread('lena.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()

           

儲存.py檔案輸入以下指令,跑起工程

python chapter06_04.py
           
Python中的圖像處理(第六章)Python圖像量化及采樣處理(1)前言一. Python準備二. Python仿真三. 小結

沒有報錯,直接彈出圖檔,運作成功!

Python中的圖像處理(第六章)Python圖像量化及采樣處理(1)前言一. Python準備二. Python仿真三. 小結
Python中的圖像處理(第六章)Python圖像量化及采樣處理(1)前言一. Python準備二. Python仿真三. 小結

(5)建立一個chapter06_05.py檔案,輸入以下代碼,圖檔也放在與.py檔案同級檔案夾下

# -*- coding: utf-8 -*-
# BY:Eastmount CSDN 2020-11-10
import cv2  
import numpy as np  
import matplotlib.pyplot as plt

#讀取原始圖像
img = cv2.imread('scenery.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()

           

儲存.py檔案輸入以下指令,跑起工程

python chapter06_05.py
           
Python中的圖像處理(第六章)Python圖像量化及采樣處理(1)前言一. Python準備二. Python仿真三. 小結

沒有報錯,直接彈出圖檔,運作成功!

Python中的圖像處理(第六章)Python圖像量化及采樣處理(1)前言一. Python準備二. Python仿真三. 小結
Python中的圖像處理(第六章)Python圖像量化及采樣處理(1)前言一. Python準備二. Python仿真三. 小結

三. 小結

本文主要介紹在Python中調用OpenCV庫對圖像進行像素級的量化,K-Means聚類分析,以及循環采樣填充等操作。由于本書的介紹比較系統全面,是以會出一個系列文章進行全系列仿真實作,下一篇文章将繼續介紹第六章節的最後5例仿真執行個體,感興趣的還是建議去原書第六章深入學習了解。每天學一個Python小知識,大家一起來學習進步阿!

本系列示例主要參考楊老師GitHub源碼,安利一下位址:ImageProcessing-Python(喜歡記得給個star哈!)

繼續閱讀