[Python从零到壹] 四十一.图像处理基础篇之图像采样处理
歡迎大家來到“Python從零到壹”,在這里我將分享約200篇Python系列文章,帶大家一起去學習和玩耍,看看Python這個有趣的世界。所有文章都將結合案例、代碼和作者的經驗講解,真心想把自己近十年的編程經驗分享給大家,希望對您有所幫助,文章中不足之處也請海涵。Python系列整體框架包括基礎語法10篇、網絡爬蟲30篇、可視化分析10篇、機器學習20篇、大數據分析20篇、圖像識別30篇、人工智能40篇、Python安全20篇、其他技巧10篇。您的關注、點贊和轉發就是對秀璋最大的支持,知識無價人有情,希望我們都能在人生路上開心快樂、共同成長。
該系列文章主要講解Python OpenCV圖像處理和圖像識別知識,前期主要講解圖像處理基礎知識、OpenCV基礎用法、常用圖像繪制方法、圖像幾何變換等,中期講解圖像處理的各種運算,包括圖像點運算、形態學處理、圖像銳化、圖像增強、圖像平滑等,后期研究圖像識別、圖像分割、圖像分類、圖像特效處理以及圖像處理相關應用。
上一篇文章介紹圖像量化處理。這篇文章將詳細講解圖像采樣處理,包括原理知識、代碼實現和局部馬賽克處理。希望文章對您有所幫助,如果有不足之處,還請海涵。
文章目錄
- 一.圖像采樣處理原理
- 二.圖像采樣實現
- 三.圖像局部采樣處理
- 四.總結
下載地址:
- https://github.com/eastmountyxz/Python-zero2one
前文賞析:
第一部分 基礎語法
- [Python從零到壹] 一.為什么我們要學Python及基礎語法詳解
- [Python從零到壹] 二.語法基礎之條件語句、循環語句和函數
- [Python從零到壹] 三.語法基礎之文件操作、CSV文件讀寫及面向對象
第二部分 網絡爬蟲
- [Python從零到壹] 四.網絡爬蟲之入門基礎及正則表達式抓取博客案例
- [Python從零到壹] 五.網絡爬蟲之BeautifulSoup基礎語法萬字詳解
- [Python從零到壹] 六.網絡爬蟲之BeautifulSoup爬取豆瓣TOP250電影詳解
- [Python從零到壹] 七.網絡爬蟲之Requests爬取豆瓣電影TOP250及CSV存儲
- [Python從零到壹] 八.數據庫之MySQL基礎知識及操作萬字詳解
- [Python從零到壹] 九.網絡爬蟲之Selenium基礎技術萬字詳解(定位元素、常用方法、鍵盤鼠標操作)
- [Python從零到壹] 十.網絡爬蟲之Selenium爬取在線百科知識萬字詳解(NLP語料構造必備技能)
第三部分 數據分析和機器學習
- [Python從零到壹] 十一.數據分析之Numpy、Pandas、Matplotlib和Sklearn入門知識萬字詳解(1)
- [Python從零到壹] 十二.機器學習之回歸分析萬字總結全網首發(線性回歸、多項式回歸、邏輯回歸)
- [Python從零到壹] 十三.機器學習之聚類分析萬字總結全網首發(K-Means、BIRCH、層次聚類、樹狀聚類)
- [Python從零到壹] 十四.機器學習之分類算法三萬字總結全網首發(決策樹、KNN、SVM、分類算法對比)
- [Python從零到壹] 十五.文本挖掘之數據預處理、Jieba工具和文本聚類萬字詳解
- [Python從零到壹] 十六.文本挖掘之詞云熱點與LDA主題分布分析萬字詳解
- [Python從零到壹] 十七.可視化分析之Matplotlib、Pandas、Echarts入門萬字詳解
- [Python從零到壹] 十八.可視化分析之Basemap地圖包入門詳解
- [Python從零到壹] 十九.可視化分析之熱力圖和箱圖繪制及應用詳解
- [Python從零到壹] 二十.可視化分析之Seaborn繪圖萬字詳解
- [Python從零到壹] 二十一.可視化分析之Pyechart繪圖萬字詳解
- [Python從零到壹] 二十二.可視化分析之OpenGL繪圖萬字詳解
- [Python從零到壹] 二十三.十大機器學習算法之決策樹分類分析詳解(1)
- [Python從零到壹] 二十四.十大機器學習算法之KMeans聚類分析詳解(2)
- [Python從零到壹] 二十五.十大機器學習算法之KNN算法及圖像分類詳解(3)
- [Python從零到壹] 二十六.十大機器學習算法之樸素貝葉斯算法及文本分類詳解(4)
- [Python從零到壹] 二十七.十大機器學習算法之線性回歸算法分析詳解(5)
- [Python從零到壹] 二十八.十大機器學習算法之SVM算法分析詳解(6)
- [Python從零到壹] 二十九.十大機器學習算法之隨機森林算法分析詳解(7)
- [Python從零到壹] 三十.十大機器學習算法之邏輯回歸算法及惡意請求檢測應用詳解(8)
- [Python從零到壹] 三十一.十大機器學習算法之Boosting和AdaBoost應用詳解(9)
- [Python從零到壹] 三十二.十大機器學習算法之層次聚類和樹狀圖聚類應用詳解(10)
第四部分 Python圖像處理基礎
- [Python從零到壹] 三十三.圖像處理基礎篇之什么是圖像處理和OpenCV配置
- [Python從零到壹] 三十四.OpenCV入門詳解——顯示讀取修改及保存圖像
- [Python從零到壹] 三十五.圖像處理基礎篇之OpenCV繪制各類幾何圖形
- [Python從零到壹] 三十六.圖像處理基礎篇之圖像算術與邏輯運算詳解
- [Python從零到壹] 三十七.圖像處理基礎篇之圖像融合處理和ROI區域繪制
- [Python從零到壹] 三十八.圖像處理基礎篇之圖像幾何變換(平移縮放旋轉)
- [Python從零到壹] 三十九.圖像處理基礎篇之圖像幾何變換(鏡像仿射透視)
- [Python從零到壹] 四十.圖像處理基礎篇之圖像量化處理
- [Python從零到壹] 四十一.圖像處理基礎篇之圖像采樣處理
第五部分 Python圖像運算和圖像增強
第六部分 Python圖像識別和圖像處理經典案例
第七部分 NLP與文本挖掘
第八部分 人工智能入門知識
第九部分 網絡攻防與AI安全
第十部分 知識圖譜構建實戰
擴展部分 人工智能高級案例
作者新開的“娜璋AI安全之家”將專注于Python和安全技術,主要分享Web滲透、系統安全、人工智能、大數據分析、圖像識別、惡意代碼檢測、CVE復現、威脅情報分析等文章。雖然作者是一名技術小白,但會保證每一篇文章都會很用心地撰寫,希望這些基礎性文章對你有所幫助,在Python和安全路上與大家一起進步。
一.圖像采樣處理原理
圖像采樣(Image Sampling)處理是將一幅連續圖像在空間上分割成M×N個網格,每個網格用一個亮度值或灰度值來表示,其示意圖如圖9-1所示。
圖像采樣的間隔越大,所得圖像像素數越少,空間分辨率越低,圖像質量越差,甚至出現馬賽克效應;相反,圖像采樣的間隔越小,所得圖像像素數越多,空間分辨率越高,圖像質量越好,但數據量會相應的增大。圖9-2展示了不同采樣間隔的“Lena”圖,其中圖(a)為原始圖像,圖(b)為128×128的圖像采樣效果,圖?為64×64的圖像采樣效果,圖(d)為32×32的圖像采樣效果,圖(e)為16×16的圖像采樣效果,圖(f)為8×8的圖像采樣效果[1-3]。
二.圖像采樣實現
下面講述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*numHeightfor 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的區域。
同樣,可以對彩色圖像進行采樣處理,下面的代碼將“小珞珞”的圖像采樣處理成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*numHeightfor 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的區域。
但上述代碼存在一個問題,當圖像的長度和寬度不能被采樣區域整除時,輸出圖像的最右邊和最下邊的區域沒有被采樣處理。這里推薦讀者做個求余運算,將不能整除部分的區域也進行相應的采樣處理。
三.圖像局部采樣處理
前面講述的代碼是對整幅圖像進行采樣處理,那么如何對圖像的局部區域進行馬賽克處理呢?下面的代碼就實現了該功能。當鼠標按下時,它能夠給鼠標拖動的區域打上馬賽克,并按下“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所示,它將人物的臉部進行馬賽克處理。
四.總結
本文主要講解了圖像的采樣處理,從基本概念到操作,再到擴展進行全方位講解,并且補充了局部馬賽克采樣處理案例。該部分的知識點能夠將生活中的圖像轉換為數字圖像,更好地為后續的圖像處理提供幫助。
最近寒假日更,為了感謝讀者。同時感謝在求學路上的同行者,不負遇見,勿忘初心。圖像處理系列主要包括三部分,分別是:
祝大家新年快樂,虎年大吉,闔家幸福,萬事如意,小珞珞給大家拜年了。親情是真的很美,很治愈。希望小珞珞和他媽媽能開心每一天,全家人身體健康。小珞珞這小樣子可愛極了,愛你們喔!
(By:娜璋之家 Eastmount 2022-02-07 夜于貴陽 https://blog.csdn.net/Eastmount )
參考文獻:
- [1]岡薩雷斯著. 數字圖像處理(第3版)[M]. 北京:電子工業出版社,2013.
- [2]Eastmount. [Python圖像處理] 三十.圖像量化及采樣處理萬字詳細總結[EB/OL]. (2020-11-10). https://blog.csdn.net/Eastmount/article/details/109605161.
- [3]Eastmount. [數字圖像處理] 三.MFC實現圖像灰度、采樣和量化功能詳解[EB/OL]. (2015-05-28). https://blog.csdn.net/eastmount/article/details/46010637.
總結
以上是生活随笔為你收集整理的[Python从零到壹] 四十一.图像处理基础篇之图像采样处理的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: [Python从零到壹] 三十七.图像处
- 下一篇: [当人工智能遇上安全] 7.基于机器学习