《計算機視覺-基于OpenCV的圖像處理》全套教學(xué)課件_第1頁
《計算機視覺-基于OpenCV的圖像處理》全套教學(xué)課件_第2頁
《計算機視覺-基于OpenCV的圖像處理》全套教學(xué)課件_第3頁
《計算機視覺-基于OpenCV的圖像處理》全套教學(xué)課件_第4頁
《計算機視覺-基于OpenCV的圖像處理》全套教學(xué)課件_第5頁
已閱讀5頁,還剩347頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

計算機視覺--OpenCV圖像處理教程課程介紹OPENCVENVIRONMENTSETTTING內(nèi)容要點:教程內(nèi)容教程前言課程內(nèi)容.pptx第1章OpenCV環(huán)境配置.pptx第2章數(shù)字圖像基本操作.pptx第3章圖像濾波操作.pptx第4章圖像亮度及對比度操作.pptx第5章圖像分割.pptx第6章目標(biāo)檢測.pptx第7章目標(biāo)追蹤.pptx第8章文字識別.pptx第9章深度學(xué)習(xí).pptx全套可編輯PPT課件目錄1課程概述理論講解2內(nèi)容組織理論講解3OpenCV上機實踐163011課程概述理論講解什么是計算機視覺計算機視覺ComputerVision利用計算機模擬人類,利用傳感器模擬人眼,利用CPU模擬大腦結(jié)構(gòu)處理實現(xiàn)對自然環(huán)境的數(shù)字化處理計算機視覺又稱為機器視覺,是一門“教”會計算機如何去“看”世界的學(xué)科。形象地說,就是給計算機安裝上眼睛(攝像頭)和大腦(算法),讓計算機能夠感知環(huán)境人類視覺系統(tǒng)計算機視覺系統(tǒng)眼睛捕捉環(huán)境大腦理解環(huán)境胡蘿卜、西紅柿、黃瓜、生菜、大蒜胡蘿卜、西紅柿、黃瓜、生菜、大蒜輸入攝像頭感知環(huán)境計算機計算和理解環(huán)境輸出結(jié)果課程內(nèi)容:計算機視覺處理流程數(shù)據(jù)采集可見光紅外X光圖像分析特征提取特征識別目標(biāo)檢測

目標(biāo)追蹤輪廓提取

圖像分割圖像分類圖像匹配圖像處理亮度

飽和度對比度平滑邊緣強化去噪去毛刺圖像輸出特征提取特征識別目標(biāo)檢測

目標(biāo)追蹤輪廓提取

圖像分割圖像分類圖片匹配OpenCV開源計算機視覺庫典型例子:圖像預(yù)處理:提升對比度典型例子:圖像預(yù)處理:提升亮度典型例子:圖像預(yù)處理:平滑典型例子:圖像分析:圖像分割典型例子:圖像分析與可視化輸出:目標(biāo)檢測課程程序?qū)嵗?sgl_666/opencv/tree/master/code先修課程Python程序設(shè)計語言線性代數(shù):矩陣運算計算機視覺--OpenCV圖像處理教程第一章OpenCV環(huán)境配置OPENCVENVIRONMENTSETTTING內(nèi)容要點:計算機視覺的定義、OpenCV庫介紹、OpenCV開發(fā)環(huán)境的配置、讀取數(shù)字圖像,建議授課時長:2課時講課時間:2024年8月9日目錄1.1計算機視覺概述理論講解1.2OpenCV概述理論講解1.3OpenCV環(huán)境配置上機實踐1.4小結(jié)及作業(yè)總結(jié)作業(yè)011.1計算機視覺概述理論講解1.1.1計算機視覺的概念計算機視覺ComputerVision計算機視覺是使用計算機及相關(guān)設(shè)備對生物視覺的一種模擬,用各種成像設(shè)備代替視覺器官作為輸入手段,用計算機來代替大腦完成處理和解釋。計算機視覺的最終研究目標(biāo)就是使計算機能像人那樣通過視覺觀察和理解世界,并且具有自主適應(yīng)環(huán)境的能力計算機視覺又稱為機器視覺,是一門“教”會計算機如何去“看”世界的學(xué)科。形象地說,就是給計算機安裝上眼睛(攝像頭)和大腦(算法),讓計算機能夠感知環(huán)境人類視覺系統(tǒng)計算機視覺系統(tǒng)眼睛捕捉環(huán)境大腦理解環(huán)境胡蘿卜、西紅柿、黃瓜、生菜、大蒜胡蘿卜、西紅柿、黃瓜、生菜、大蒜輸入攝像頭感知環(huán)境計算機計算和理解環(huán)境輸出結(jié)果1.1.2計算機視覺的任務(wù)圖像分類、目標(biāo)檢測和圖像分割是計算機視覺的三大基本任務(wù)1.1.3其他任務(wù)風(fēng)格遷移圖像修復(fù)1.1.3其他任務(wù)超分辨率1.1.3其他任務(wù)圖像生成,根據(jù)左圖的馬生成右圖的斑馬1.1.3其他任務(wù)三維重建1.1.3計算機視覺的應(yīng)用自動駕駛?cè)缙噷崿F(xiàn)行駛路線規(guī)劃、障礙物檢測和避讓、交通信號識別等1.1.3計算機視覺的應(yīng)用工業(yè)制造包括機器人視覺系統(tǒng)、缺陷檢測、質(zhì)量控制、零件識別和裝配等1.1.3計算機視覺的應(yīng)用醫(yī)療診斷包括影像分析、疾病診斷和治療監(jiān)測等1.1.3計算機視覺的應(yīng)用安防監(jiān)控包括人臉識別、行為分析、犯罪偵查等1.1.3計算機視覺的應(yīng)用增強現(xiàn)實包括虛擬現(xiàn)實、游戲、電影和電視特效1.1.3計算機視覺的應(yīng)用城市管理包括垃圾傾倒監(jiān)控、自動分揀、可回收物分類、車位管理、占道經(jīng)營等1.1.3計算機視覺的應(yīng)用農(nóng)業(yè)領(lǐng)域包括種植和收獲自動化、作物識別和病害檢測等1.1.3計算機視覺的應(yīng)用游戲和娛樂包括運動追蹤、手勢識別、面部表情識別等021.2OpenCV概述理論講解1.2OpenCV概述OpenCVOpenCV全稱為OpenSourceComputerVisionLibrary,中文譯為開源計算機視覺庫,其官網(wǎng)為。OpenCV于1999年在英特爾啟動,第一個版本于2000年發(fā)布。1.2OpenCV概述OpenCV2005年,搭載OpenCV的斯坦利自動駕駛汽車贏得了2005年美國國防部高級研究計劃局(DARPA)在美國莫哈維沙漠地區(qū)舉行的無人駕駛挑戰(zhàn)賽,如圖1-8所示。經(jīng)過20多年的發(fā)展。OpenCV支持了計算機視覺和機器學(xué)習(xí)相關(guān)的數(shù)百種算法,并且仍在繼續(xù)發(fā)展。Stanley在2005年挑戰(zhàn)賽上的表現(xiàn)證明無人駕駛技術(shù)的難點首次被突破。2004年第一屆挑戰(zhàn)賽上,沒有一輛自動駕駛汽車能行駛超過7英里,甚至很多車都沒開過起跑線。但沒想到,僅隔一年,斯坦福大學(xué)開發(fā)的Stanley就可以在復(fù)雜地形上平均每小時行駛約20英里。1.2OpenCV概述OpenCV支持多種編程語言,如C++、Python、Java等,并可在Windows、Linux、OSX、Android和iOS等不同的平臺上使用本課程采用OpenCV-Python執(zhí)行速度類似于C++無縫接入深度學(xué)習(xí)算法庫OpenCV底層使用C/C++語言編寫,然后用Python對底層代碼進行了封裝,保留了底層算法API給應(yīng)用開發(fā)人員,從而使得OpenCV-Python庫擁有和原生OpenCV一樣的執(zhí)行速度,同時具備了Python語言的快速開發(fā)優(yōu)勢。Python下有完整的深度學(xué)習(xí)生態(tài),可以與Pytorch、Tensorflow、PaddlePaddle等深度學(xué)習(xí)庫集成開發(fā),在項目中應(yīng)用最新的計算機視覺算法成果。031.3OpenCV-Python環(huán)境配置實際操作1.3.1Python環(huán)境的安裝①訪問清華大學(xué)開源鏡像網(wǎng)站:/help/anaconda/,并跳轉(zhuǎn)到最新安裝包下載頁面(/anaconda/archive)1.3.1Python環(huán)境的安裝2、下載最新的安裝包,注意時間順序1.3.1Python環(huán)境的安裝③下載后按照步驟安裝,對應(yīng)步驟截圖參考如下,詳細可見教材,安裝盤注意選擇空間較大的磁盤?。?!注意“Createstartmenushortcuts”務(wù)必勾選?。?!1.3.1Python環(huán)境的安裝④在win11的搜索欄中可以輸入【AnacondaPrompt】,快速彈出命令行界面在彈出的Anaconda控制臺中,輸入python,出現(xiàn)Python環(huán)境提示信息,證明Python安裝成功,鍵入“exit()”退出python環(huán)境,關(guān)閉對話框。1.3.2OpenCV-Python安裝①為加快軟件安裝速度,通過以下命令切換到國內(nèi)源:condaconfig--addchannels/anaconda/pkgs/free/condaconfig--addchannels/anaconda/pkgs/main/condaconfig--addchannels/anaconda/cloud/conda-forge/condaconfig--addchannels/anaconda/cloud/msys2/condaconfig--setshow_channel_urlsyes1.3.2OpenCV-Python安裝Conda的優(yōu)勢:可以將不同的軟件版本可以按照在同一臺電腦②

為OpenCV-Python準備環(huán)境condacreate-nopencv4.7python=3.91.3.2OpenCV-Python安裝③

切換到OpenCV-Python環(huán)境condaactivateopencv4.7④

將pip切換為國內(nèi)源pipconfigsetglobal.index-url/simple⑤

安裝OpenCV4.7版本pipinstallopencv-python==21.3.2OpenCV-Python安裝⑥驗證Opencv-Python是否安裝成功pythonimportcv2print(cv2.__version__)1.3.3PyCharm安裝及配置PyCharm下載網(wǎng)址為/pycharm/download/#section=windows如果有edu郵箱,可以下載專業(yè)版(Professional),否則可以下載社區(qū)版(Community)。PyCharm的使用①②③④項目創(chuàng)建開發(fā)環(huán)境選擇1.3.3PyCharm安裝及配置程序主界面創(chuàng)建Python程序1.3.3PyCharm安裝及配置編寫代碼及運行創(chuàng)建Python程序1.3.3PyCharm安裝及配置編寫代碼及運行031.4小結(jié)及作業(yè)總結(jié)課程總結(jié)本章對計算機視覺的基本概念、基本任務(wù)和應(yīng)用場景進行了概述,并對計算機視覺工具庫OpenCV的安裝過程進行了詳細講解,進一步地,完成了PyCharm開發(fā)工具的安裝作業(yè)1、什么是計算機視覺?給出計算機視覺的一個應(yīng)用場景,詳細描述,不低于300字。2、除了OpenCV,還有哪些可以使用的計算機視覺庫?3、OpenCV當(dāng)前的最新版本是什么?如何不與當(dāng)前教程版本沖突的情況下,安裝最新版本的OpenCV?計算機視覺--OpenCV圖像處理教程第二章數(shù)字圖像基本操作BASICOPERATIONSOFDIGITALIMAGES內(nèi)容要點:圖像在OpenCV中的打開與保存、數(shù)字圖像在計算機中的表示方法、視頻在OpenCV中的打開與保存、圖像的灰度化、彩色化、興趣區(qū)域選取等基本操作、圖像的基本幾何變換建議課時:6課時講課時間:2024年8月9日目錄2.1數(shù)字圖像的讀取與顯示理論+實操2.2數(shù)字圖像在計算機中的表示理論+實操2.3視頻采集與存儲理論+實操2.4圖像基本操作理論+實操2.5圖像的幾何變換理論+實操2.6基于顏色的目標(biāo)追蹤項目實戰(zhàn)2.7小結(jié)及作業(yè)理論講解012.1數(shù)字圖像的讀取與顯示理論+實操2.1數(shù)字圖像的讀取與顯示圖像Image圖像是人類視覺的基礎(chǔ),是自然景物的客觀反映,是人類認識世界和人類本身的重要源泉。“圖”是物體反射或透射光的分布,“像”是人的視覺系統(tǒng)所接受的圖在人腦中所形成的印象或認識。數(shù)字圖像DigitalImage自然界中圖像在計算機中的表示稱為數(shù)字圖像。照片、繪畫、剪貼畫、地圖、書法作品、手寫漢字、傳真、衛(wèi)星云圖、影視畫面、X光片、腦電圖、心電圖等都是圖像2.1數(shù)字圖像的讀取與顯示實操步驟創(chuàng)建新項目及文件夾1、下載圖像/sgl_666/opencv/blob/master/code/chp2/data/0000.jpg2、打開PyCharm,創(chuàng)建新項目3、在新項目上右鍵,創(chuàng)建data文件夾,圖像拷貝到該文件夾內(nèi)2.1數(shù)字圖像的讀取與顯示4、拷貝圖像到data文件夾5、創(chuàng)建image_read.py,編寫代碼:importcv2img=cv2.imread('data/0000.jpg')cv2.imshow("img",img)cv2.waitKey(0)6、在工作區(qū)點擊右鍵,運行image_read.py022.2數(shù)字圖像在計算機中的表示理論+實操2.2.1實操驗證1、創(chuàng)建image_info.py,編寫代碼:importcv2img=cv2.imread('data/0000.jpg')print(img.shape)2、右鍵運行image_info.py,輸出為:(1920,2560,3)2.2.2圖像屬性3、結(jié)果驗證,選中000.jpg文件→右鍵→在文件夾中打開→選中文件后→右鍵→查看屬性右鍵-屬性①可以看到圖像大小為2560x1920像素,位深度為24。這里2560為圖像寬度,1920為圖像寬度,在計算機中,一位為8個字節(jié),24/8=3,剛好(1920,2560,3)【注意:顯示順序,數(shù)組行=高,列=寬】②③輸出結(jié)果為2.2.3圖像坐標(biāo)系在OpenCV中,圖像原點位于圖像的左上角,坐標(biāo)值(0,0)的點代表圖像的第一個元素,x軸向右為正,代表圖像的行,y軸向下為正print(img[0,0])print(img)輸出結(jié)果為[200196195]輸出結(jié)果:2.2.3圖像坐標(biāo)系在OpenCV中,用行、列序號索引圖像某個像素值,即img[row,col]中的第一維索引為圖像行號,第二維索引為圖像列號我們通常稱圖像分辨率為2560x1920,其中2560為圖像寬度,1920為圖像寬度,和OpenCV中的索引順序不同,在實際編程中需要特別注意顯示器及某個區(qū)域在電子顯微鏡下的放大效果另外:OpenCV彩色圖像的排列順序為藍綠紅一般軟件為紅綠藍,這里也需要注意2.2.3數(shù)字圖像的分類二進制圖像(只有二值,0表示黑色,1表示白色)灰度圖像(uint8,取值范圍[0,255])RGB圖像(3通道混合,每個通道取值范圍[0,255])索引圖像,包括索引矩陣和顏色映射(調(diào)色板)矩陣2.2.3數(shù)字圖像的分類多幀圖像(CT)多幀圖像(GIF)032.3視頻采集與存儲理論+實操2.3視頻采集與存儲①創(chuàng)建文件video_capture.py②創(chuàng)建顯示視頻窗口③打開攝像頭importcv2dWindow('Video’)video_capture=cv2.VideoCapture(0)2.3視頻采集與存儲④創(chuàng)建視頻寫入對象,保存攝像頭數(shù)據(jù)到硬盤video_writer=cv2.VideoWriter('data/test.mp4',cv2.VideoWriter_fourcc(*"mp4v"),video_capture.get(cv2.CAP_PROP_FPS),(int(video_capture.get(cv2.CAP_PROP_FRAME_WIDTH)),int(video_capture.get(cv2.CAP_PROP_FRAME_HEIGHT))))2.3視頻采集與存儲⑤讀取視頻幀,對視頻幀進行高斯模糊,然后寫入文件并在窗口顯示success,frame=video_capture.read()whilesuccessandnotcv2.waitKey(1)==27:blur_frame=cv2.GaussianBlur(frame,(3,3),0)video_writer.write(blur_frame)cv2.imshow("Video",blur_frame)success,frame=video_capture.read()2.3視頻采集與存儲⑥回收資源cv2.destroyWindow('Video')video_capture.release()⑦運行程序data文件夾,可以看到生成了名為“test.mp4”data文件夾下同步生成了“test.mp4”042.4圖像基本操作理論+實操2.4.1圖像像素操作①創(chuàng)建image_operations.py②讀取圖像,輸出第1行、第1列紅色分量的值importcv2

img=cv2.imread('data/0000.jpg')red=img[0,0,2]print(red) 結(jié)果為1952.4.1圖像像素操作③item及itemset的應(yīng)用#讀取紅色分量值print(img[10,5,2])print(img.item(10,5,2))#修改紅色分量值img.itemset((10,5,2),100)print(img.item(10,5,2))item()方法效率一般,一般用numpy方式來索引數(shù)組元素2.4.2圖像興趣區(qū)域選?、躰umpy方式#獲取圖像中圖書區(qū)域book=img[2:1247,1230:2145]cv2.imshow("book",book)cv2.waitKey(0)興趣區(qū)域ROI截取的圖像興趣區(qū)域book和原始圖像一樣,在OpenCV中可以調(diào)用相同的操作函數(shù),例如:print(book.shape)2.4.3圖像通道操作⑤繼續(xù)添加如下代碼:#讀取藍色通道,最后一個值為0b=book[:,:,0]#讀取綠色通道,最后一個值為1g=book[:,:,1]#讀取紅色通道,最后一個值為2r=book[:,:,2]

#分別顯示cv2.imshow("b",b)cv2.imshow("g",g)cv2.imshow("r",r)

cv2.waitKey()cv2.destroyAllWindows() 圖像通道,由左到右為:B、G、R通道2.4.3圖像通道操作⑥以下為OpenCV中的函數(shù),C++常用,Python一般直接操作數(shù)組:#圖像通道分離b,g,r=cv2.split(book)#圖像通道合并book2=cv2.merge((b,g,r))cv2.imshow("book2",book)cv2.waitKey()cv2.destroyAllWindows()

圖像通道,由左到右為:B、G、R通道存在不同顏色空間類型,有RGB色彩空間,Gray(灰度)色彩空間,XYZ色彩空間,YCrCb色彩空間,HSV色彩空間,HLS色彩空間,Bayer色彩空間等2.4.4顏色空間轉(zhuǎn)換⑦彩色圖像轉(zhuǎn)為灰度圖像:#顏色空間轉(zhuǎn)換book_gray=cv2.cvtColor(book,cv2.COLOR_BGR2GRAY)cv2.imshow("book_gray",book_gray)cv2.waitKey()cv2.destroyAllWindows()

色調(diào)H的取值范圍用角度度量,為0°~360°,如果是灰度圖,則H為0。從紅色開始按逆時針方向計算,紅色為0°,綠色為120°,藍色為240°2.4.5圖像邊框的填充⑧圖表繪制工具matplotlib的安裝condaactivateopencv4.7pipinstallmatplotlib以上指令需要切換回Anaconda控制臺2.4.5圖像邊框的填充⑨利用copyMakeBorder完成圖像邊界填充

Frommatplotlibimportpyplotasplt

RED=[255,0,0]Img1=img[1188:1455,1725:2022]Replicate=cv2.copyMakeBorder(img1,10,10,10,10,cv2.BORDER_REPLICATE)reflect=cv2.copyMakeBorder(img1,10,10,10,10,cv2.BORDER_REFLECT)reflect101=cv2.copyMakeBorder(img1,10,10,10,10,cv2.BORDER_REFLECT_101)wrap=cv2.copyMakeBorder(img1,10,10,10,10,cv2.BORDER_WRAP)constant=cv2.copyMakeBorder(img1,10,10,10,10,cv2.BORDER_CONSTANT,value=RED)plt.subplot(231),plt.imshow(img1,'gray'),plt.title('ORIGINAL')plt.subplot(232),plt.imshow(replicate,'gray'),plt.title('REPLICATE')plt.subplot(233),plt.imshow(reflect,'gray'),plt.title('REFLECT')plt.subplot(234),plt.imshow(reflect101,'gray'),plt.title('REFLECT_101')plt.subplot(235),plt.imshow(wrap,'gray'),plt.title('WRAP')plt.subplot(236),plt.imshow(constant,'gray'),plt.title('CONSTANT’)plt.show()

2.4.5圖像邊框的填充⑨利用copyMakeBorder完成圖像邊界填充

OpenCV添加不同邊框效果的展示cv2.copyMakeBorder()src:輸入圖像top,bottom,left,right:邊界寬度borderType:定義要添加的邊框類型的標(biāo)志。它可以是以下類型:cv.BORDER_CONSTANT:添加一個不變的彩色邊框。該值應(yīng)作為下一個參數(shù)給出。cv.BORDER_REFLECT:邊界將是邊界元素的鏡像反射,示意如下:fedcba|abcdefgh|hgfedcbcv.BORDER_REFECT_101或cv.BORDER_DEFAULT:與上述相同,但略有變化,示意如下:gfedcb|abcdefgh|gfedcbacv.BORDER_REPICATE:最后一個元素被復(fù)制到各處,示意如下:aaaaa|abcdefgh|hhhhhhhcv.BORDER_WRAP-示意如下:cdefgh|abcdefgh|abcdefgvalue:邊框類型為cv.border_CONSTANT時,該參數(shù)用來設(shè)置邊框顏色OpenCV添加不同邊框效果的展示052.5圖像的幾何變換理論+實操2.5.1圖像幾何變換的種類學(xué)會看文檔:/4.7.0/da/d6e/tutorial_py_geometric_transformations.html2.5.2圖像的縮放importcv2

img=cv2.imread('data/0000.jpg')#獲取圖像寬度和高度,注意OpenCV矩陣索引第1維為行(高度),第2維為列(寬度)height,width=img.shape[:2]

#圖像縮放四分之一大小res1=cv2.resize(img,(int(width/4),int(height/4)),interpolation=cv2.INTER_CUBIC)cv2.imshow('resize1',res1)

#第二種縮放方式,fx為橫軸縮放比例,fy為縱軸縮放比例res2=cv2.resize(img,dsize=None,fx=0.25,fy=0.25,interpolation=cv2.INTER_CUBIC)

cv2.imshow('resize2',res2)cv2.waitKey(0)cv2.destroyAllWindows()自行操作,運行查看效果①創(chuàng)建image_

geometric_trans.py,輸入代碼:2.5.2圖像的縮放參數(shù)意義:cv2.resize()中interpolation參數(shù)的意思為插值。插值:當(dāng)圖像縮放時,假設(shè)為放大操作,則圖像的像素之間出現(xiàn)了空隙,填充空隙的方法稱為插值。CV_INTER_NN:最近鄰插值CV_INTER_LINEAR:雙線性插值(缺省使用)

CV_INTER_AREA:使用像素關(guān)系重采樣,當(dāng)圖像縮小時,該方法可以避免波紋出現(xiàn),當(dāng)圖像放大時,類似于CV_INTER_NNCV_INTER_CUBIC:立方插值2.5.3圖像的平移#導(dǎo)入矩陣庫numpyimportnumpyasnp#讀取行、列信息rows,cols=res1.shape[:2]#構(gòu)建變換矩陣M=np.float32([[1,0,100],[0,1,50]])#位移操作translate=cv2.warpAffine(res1,M,(cols,rows))

cv2.imshow('translate',translate)cv2.waitKey(0)cv2.destroyAllWindows()設(shè)在x方向平移width個單位,計算如下:②繼續(xù)在image_

geometric_trans.py中輸入:2.5.3圖像的平移運行結(jié)果變換函數(shù):translate=cv2.warpAffine(res1,M,(cols,rows))cv.warpAffine()函數(shù)的第三個參數(shù)是輸出圖像的大小,其形式應(yīng)為“(寬度、高度)”需要記?。篛penCV中width=列數(shù),height=行數(shù)變換函數(shù)2.5.4圖像的旋轉(zhuǎn)#構(gòu)建旋轉(zhuǎn)矩陣,這里cols-1和rows-1是圖像坐標(biāo)值上限M=cv2.getRotationMatrix2D(((cols-1)/2.0,(rows-1)/2.0),90,1)rotate=cv2.warpAffine(res1,M,(cols,rows))

cv2.imshow('rotate',rotate)cv2.waitKey(0)cv2.destroyAllWindows()逆時針90°③繼續(xù)在image_

geometric_trans.py中輸入:2.5.5圖像的透視變換#存儲res1.jpg,方便進行標(biāo)定cv2.imwrite("data/res1.jpg",res1)

#透視變換對應(yīng)關(guān)系pts1=np.float32([[69,0],[563,8],[25,479],[601,479]])pts2=np.float32([[0,0],[576,0],[0,479],[576,479]])M=cv2.getPerspectiveTransform(pts1,pts2)warp_persp=cv2.warpPerspective(res1,M,(576,479))

#存儲變形后圖像cv2.imwrite("data/warp_persp.jpg",warp_persp)#顯示圖像cv2.imshow('perspective',warp_persp)cv2.waitKey(0)cv2.destroyAllWindows()透視變換④繼續(xù)在image_

geometric_trans.py中輸入062.6基于顏色的目標(biāo)追蹤項目實戰(zhàn)2.6.1任務(wù)流程拍攝視頻的每一幀從BGR轉(zhuǎn)換到HSV空間知識點:2.3節(jié)視頻采集知識點:2.4節(jié)色彩空間提取目標(biāo)顏色完成追蹤設(shè)置追蹤顏色閾值新知識點:bitwise_and2.6.2代碼實現(xiàn)①創(chuàng)建名為“color_tracking.py”的文件②輸入代碼:importcv2importnumpyasnp

#讀取攝像頭cap=cv2.VideoCapture(0)while(1):#獲取圖像幀_,frame=cap.read()#顏色空間轉(zhuǎn)換:BGRtoHSVhsv=cv2.cvtColor(frame,cv2.COLOR_BGR2HSV)#在HSV空間中定義追蹤的顏色閾值范圍lower_blue=np.array([110,50,50])upper_blue=np.array([130,255,255])

#獲取符合閾值的圖像掩碼mask=cv2.inRange(hsv,lower_blue,upper_blue)

#通過掩碼運算來從原圖像上獲取目標(biāo)區(qū)域res=cv2.bitwise_and(frame,frame,mask=mask)

cv2.imshow('frame',frame)cv2.imshow('mask',mask)cv2.imshow('res',res)k=cv2.waitKey(5)&0xFFifk==27:break

cv2.destroyAllWindows()bitwise_and()函數(shù)是OpenCV中的一種摳圖方式,通過圖像值為[0,1]的二值掩碼mask圖像,可以從圖像中獲取感興趣的內(nèi)容,并將結(jié)果保存在新的圖像數(shù)組中2.6.3運行結(jié)果③運行驗證通過綜合實戰(zhàn)案例可以發(fā)現(xiàn),僅靠顏色這個單一特征,很難做到完美的目標(biāo)追蹤,因此在計算機視覺中的一個核心任務(wù)就是如何更好地表示物體的特征,能讓興趣目標(biāo)從背景中分離出來,也是接下來要學(xué)習(xí)的內(nèi)容062.7小結(jié)及作業(yè)總結(jié)提高課程總結(jié)本章介紹了數(shù)字圖像的概念及表示形式,通過代碼實戰(zhàn)了圖像、視頻的存儲與保存,圖像像素、興趣區(qū)域選取、通道變換、顏色空間變換等基本圖像操作,并進一步介紹了圖像幾何變換的相關(guān)知識,實現(xiàn)了部分幾何變換方法,最終完成了一種基于顏色的目標(biāo)追蹤方法,可以看出,僅僅基于圖像顏色,不能完成興趣目標(biāo)的追蹤,干擾因素太多了,后面將通過更多的特征來實現(xiàn)目標(biāo)檢測。作業(yè)1、什么是數(shù)字圖像?圖像和數(shù)字圖像的區(qū)別是什么?2、自己用手機拍攝一張圖像,保存到電腦,利用OpenCV完成該圖像的縮放操作,例如縮放到1024X1024。3、在第2題中,會發(fā)現(xiàn)圖像縮放后變形,實現(xiàn)圖像的等比縮放,讓窄邊自動填充為黑色背景,圖像整體居中:計算機視覺--OpenCV圖像處理教程第三章圖像濾波操作IMAGEFILTERINGOPERATION內(nèi)容要點:圖像噪聲的概念、圖像濾波與圖像卷積、圖像平滑降噪、圖像邊緣提取建議課時:8課時講課時間:2024年8月9日目錄3.1圖像噪聲概念理論+實操3.2圖像濾波概念理論講解3.3鄰域平滑濾波理論+實操3.4低通濾波及高通濾波理論+實操3.5圖像梯度及邊緣濾波理論+實操3.6圖像清晰度評價項目實戰(zhàn)013.1圖像噪聲理論+實操3.1圖像噪聲圖像噪聲ImageNoise圖像在生成和傳輸過程中常常因受到各種噪聲的干擾和影響而是圖像降質(zhì),這對后續(xù)圖像的處理和圖像視覺效應(yīng)將產(chǎn)生不利影響。噪聲種類很多,比如:電噪聲,機械噪聲,信道噪聲和其他噪聲。1、椒鹽噪聲椒鹽噪聲(salt-and-peppernoise)也稱為脈沖噪聲,是數(shù)字圖像的一個常見噪聲,它是一種隨機出現(xiàn)的白點或者黑點。椒鹽噪聲是指兩種噪聲,一種是鹽噪聲(saltnoise),另一種是椒噪聲(peppernoise)。前者是高灰度噪聲,后者屬于低灰度噪聲。一般兩種噪聲同時出現(xiàn),呈現(xiàn)在圖像上就是黑白雜點。2、高斯噪聲高斯噪聲(gaussnoise)是指它的概率密度函數(shù)服從高斯分布(即正態(tài)分布)的一類噪聲。3、斑點噪聲斑點噪聲是合成孔徑雷達(SAR,SyntheticApertureRadar)成像系統(tǒng)的一大特色,源自基本分辨單元內(nèi)地物的隨機散射,在圖像上表現(xiàn)為信號相關(guān)的小斑點椒鹽噪聲高斯噪聲椒鹽噪聲斑點噪聲周期噪聲3.1圖像噪聲實操:為圖像添加噪聲①圖像準備:下載/sgl_666/opencv/blob/master/code/chp3/data/0499.jpg到data文件夾②添加工具包condaactivateopencv4.7pipinstallscikit-image③創(chuàng)建add_noisy.py文件,輸入fromskimage.utilimportrandom_noiseimportcv2importnumpyasnpfrommatplotlibimportpyplotasplt3.1圖像噪聲④繼續(xù)輸入:img=cv2.imread("data/0499.jpg")img=cv2.resize(img,dsize=None,fx=0.10,fy=0.10,interpolation=cv2.INTER_CUBIC)img=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)

snoise_img=random_noise(img,mode='salt',amount=0.05)#鹽噪聲pnoise_img=random_noise(img,mode='pepper',amount=0.05)#椒噪聲spnoise_img=random_noise(img,mode='s&p',amount=0.05)#椒鹽噪聲guassian_img=random_noise(img,mode='gaussian')#高斯噪聲speckle_img=random_noise(img,mode='speckle')#speckle均勻噪聲/斑點噪聲3.1圖像噪聲⑤結(jié)果輸出,中文處理:#解決plt中文顯示問題plt.rcParams['font.sans-serif']=['SimHei']plt.rcParams['font.size']=30#全局設(shè)置輸出圖片大小1920x1080像素plt.rcParams['figure.figsize']=(19.2,10.8)imgs=[img,snoise_img,pnoise_img,spnoise_img,guassian_img,speckle_img]titles=["原始圖像","鹽噪聲","椒噪聲","椒鹽噪聲","高斯噪聲","斑點噪聲"]

foriinrange(6):img0=plt.subplot(2,3,i+1)img0.set_title(titles[i])plt.imshow(imgs[i],cmap="gray")plt.xticks([])plt.yticks([])

plt.show()cv2.waitKey(0)3.1圖像噪聲⑥可視化結(jié)果023.2圖像濾波理論講解3.2圖像濾波圖像濾波在盡量保留圖像細節(jié)特征的條件下對目標(biāo)圖像的噪聲進行抑制鄰域濾波頻域濾波線性濾波:均值濾波、方框濾波、高斯濾波非線性濾波:中值濾波、雙邊濾波鄰域濾波一般通過當(dāng)前像素與周期像素進行加權(quán)平均來實現(xiàn),稱為卷積

:低通濾波:濾除原圖像的高頻成分,即模糊圖像邊緣與細節(jié)高通濾波:濾除原圖像的低頻成分,即圖像銳化)033.3鄰域平滑濾波理論+實操3.3鄰域平滑濾波圖像平滑也稱為圖像低通濾波,圖像噪音一般為高頻①創(chuàng)建img_smooth.py②編寫平滑濾波代碼importcv2importmatplotlib.pyplotasplt

#輸入圖像img=cv2.imread('data/0499.jpg')img=cv2.resize(img,dsize=None,fx=0.10,fy=0.10,interpolation=cv2.INTER_CUBIC)3.3鄰域平滑濾波③均值濾波#均值濾波img_blur=cv2.blur(img,(3,3))#(3,3)代表卷積核尺寸,隨著尺寸變大,圖像會越來越模糊img_blur=cv2.cvtColor(img_blur,cv2.COLOR_BGR2RGB)#BGR轉(zhuǎn)化為RGB格式均值濾波采用多次測量取平均值的思想,用每一個像素周圍的像素的平均值代替自身。它能夠?qū)⑹艿皆肼曈绊懙南袼厥褂迷撛肼曋車南袼刂颠M行修復(fù),對椒鹽噪聲的濾除比較好。但是它不能很好地保護圖像細節(jié),在圖像去噪的同時也破壞了圖像的細節(jié)部分,從而使圖像變得模糊3.3鄰域平滑濾波③均值濾波3.3鄰域平滑濾波④方框濾波#方框濾波img_boxFilter1=cv2.boxFilter(img,-1,(3,3),normalize=True)#當(dāng)normalize=True時,與均值濾波結(jié)果相同img_boxFilter1=cv2.cvtColor(img_boxFilter1,cv2.COLOR_BGR2RGB)#BGR轉(zhuǎn)化為RGB格式img_boxFilter2=cv2.boxFilter(img,-1,(3,3),normalize=False)img_boxFilter2=cv2.cvtColor(img_boxFilter2,cv2.COLOR_BGR2RGB)#BGR轉(zhuǎn)化為RGB格式在方框濾波中,可以自由選擇是否對均值濾波的結(jié)果進行歸一化,即可以自由選擇濾波結(jié)果是鄰域像素值之和的平均值,還是鄰域像素值之和。當(dāng)normalize=True時,與均值濾波結(jié)果相同;當(dāng)normalize=False時,表示對加和后的結(jié)果不進行平均操作,大于255的使用255表示,因為不進行平均表示,處理后的圖像中可能會出現(xiàn)大量的白色區(qū)域3.3鄰域平滑濾波⑤高斯濾波#高斯濾波#參數(shù)說明:(源圖像,核大小,x方向的標(biāo)準差,y方向的標(biāo)準差)img_GaussianBlur=cv2.GaussianBlur(img,(3,3),0,0)img_GaussianBlur=cv2.cvtColor(img_GaussianBlur,cv2.COLOR_BGR2RGB)#BGR轉(zhuǎn)化為RGB格式高斯濾波(GaussFilter)基于二維高斯核函數(shù)。用一個模板(或稱卷積、掩模)掃描圖像中的每一個像素,用模板確定的鄰域內(nèi)像素的加權(quán)平均灰度值去替代模板中心像素點的值。高斯濾波主要用來去除高斯噪聲。3.3鄰域平滑濾波⑥中值濾波#中值濾波img_medianBlur=cv2.medianBlur(img,3)img_medianBlur=cv2.cvtColor(img_medianBlur,cv2.COLOR_BGR2RGB)#BGR轉(zhuǎn)化為RGB格式中值濾波將待處理的像素周圍像素從小到大排序,取中值代替該像素。其優(yōu)點為去除脈沖噪聲、椒鹽噪聲的同時又能保留圖像邊緣細節(jié),但是當(dāng)卷積核較大時,圖像將變得模糊,而且計算量很大3.3鄰域平滑濾波⑥中值濾波3.3鄰域平滑濾波⑥中值濾波與其他濾波方法的比較3.3鄰域平滑濾波⑦雙邊濾波#雙邊濾波#參數(shù)說明:(源圖像,核大小,sigmaColor,sigmaSpace)img_bilateralFilter=cv2.bilateralFilter(img,50,100,100)img_bilateralFilter=cv2.cvtColor(img_bilateralFilter,cv2.COLOR_BGR2RGB)#BGR轉(zhuǎn)化為RGB格式雙邊濾波由2個函數(shù)綜合而成,一個函數(shù)由像素歐式距離決定濾波器模板的系數(shù),另一個函數(shù)由像素的灰度差值決定濾波器的系數(shù)。由此,雙邊濾波結(jié)合了高斯濾波以及均值濾波的特點。。3.3鄰域平滑濾波⑦雙邊濾波:美顏效果3.3鄰域平滑濾波⑦雙邊濾波:美顏效果sigmaSpace=10sigmaSpace=35原圖3.3鄰域平滑濾波⑧可視化輸出#輸出plt.rcParams['font.sans-serif']=['SimHei']plt.rcParams['font.size']=30#全局設(shè)置輸出圖片大小1920x1080像素plt.rcParams['figure.figsize']=(19.2,10.8)titles=['均值平滑','方框濾波','方框濾波2','高斯平滑','中值平滑','雙邊濾波']images=[img_blur,img_boxFilter1,img_boxFilter2,img_GaussianBlur,img_medianBlur,img_bilateralFilter]

foriinrange(6):plt.subplot(2,3,i+1),plt.imshow(images[i]),plt.title(titles[i])plt.axis('off')plt.show()3.3鄰域平滑濾波⑨運行結(jié)果3.3鄰域平滑濾波實際操作:高斯噪聲的生成及去噪操作步驟:①打開圖像,②添加高斯噪聲,③去除高斯噪聲作為課堂練習(xí),代碼見/sgl_666/opencv/blob/master/code/chp3/gauss_filter.py043.4頻域低通濾波及高通濾波理論+實操3.4頻率:低通及高通濾波①創(chuàng)建名為“frequency_filter”的Python文件②輸入初始化的代碼:importcv2importnumpyasnpfromPILimportImagefrommatplotlibimportpyplotasplt3.4頻率:低通及高通濾波③定義低通濾波函數(shù):#低通濾波defLow_Pass_Filter(srcImg_path):img=np.array(Image.open(srcImg_path))img=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)

#傅里葉變換dft=cv2.dft(np.float32(img),flags=cv2.DFT_COMPLEX_OUTPUT)fshift=np.fft.fftshift(dft)

#設(shè)置低通濾波器rows,cols=img.shapecrow,ccol=int(rows/2),int(cols/2)#中心位置mask=np.zeros((rows,cols,2),np.uint8)mask[crow-30:crow+30,ccol-30:ccol+30]=1#掩膜圖像和頻譜圖像乘積f=fshift*mask

#傅里葉逆變換ishift=np.fft.ifftshift(f)iimg=cv2.idft(ishift)res=cv2.magnitude(iimg[:,:,0],iimg[:,:,1])

returnres3.4頻率:低通及高通濾波④定義高通濾波函數(shù):defHigh_Pass_Filter(srcImg_path):img=np.array(Image.open(srcImg_path))img=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)

#傅里葉變換dft=cv2.dft(np.float32(img),flags=cv2.DFT_COMPLEX_OUTPUT)fshift=np.fft.fftshift(dft)

#設(shè)置高通濾波器rows,cols=img.shapecrow,ccol=int(rows/2),int(cols/2)#中心位置mask=np.ones((rows,cols,2),np.uint8)mask[crow-30:crow+30,ccol-30:ccol+30]=0#掩膜圖像和頻譜圖像乘積f=fshift*mask

#傅里葉逆變換ishift=np.fft.ifftshift(f)iimg=cv2.idft(ishift)res=cv2.magnitude(iimg[:,:,0],iimg[:,:,1])

returnres

3.4頻率:低通及高通濾波⑤可視化輸出:plt.rcParams['font.sans-serif']=['SimHei']plt.rcParams['font.size']=30#全局設(shè)置輸出圖片大小1920x1080像素plt.rcParams['figure.figsize']=(19.2,10.8)img_Low_Pass_Filter=Low_Pass_Filter('data/0499.jpg')plt.subplot(121),plt.imshow(img_Low_Pass_Filter,'gray'),plt.title('低通濾波')plt.axis('off')

img_High_Pass_Filter=High_Pass_Filter('data/0499.jpg')plt.subplot(122),plt.imshow(img_High_Pass_Filter,'gray'),plt.title('高通濾波')plt.axis('off')

plt.show()3.4頻率:低通及高通濾波⑥運行結(jié)果:低通濾波的規(guī)則是低頻信息能正常通過,而超過設(shè)定臨界值的高頻信息則被阻隔、減弱,使得圖像背景和基本內(nèi)容被保留,而圖像邊緣被阻擋,圖像變模糊。與之對應(yīng),高通濾波的規(guī)則為高頻信息能正常通過,而低于設(shè)定臨界值的低頻信息則被阻隔、減弱,因此高通濾波提取了圖像的邊緣和噪聲3.4頻率:低通及高通濾波知識拓展:傅里葉變換參見:傅里葉變換公式詳解()/s?id=1764217576330254556&wfr=spider&for=pc053.5圖像梯度及邊緣濾波理論+實操3.5圖像梯度圖像梯度是指圖像某像素在x和y兩個方向上的變化率(與相鄰像素比較),是一個二維向量,由2個分量組成X軸的變化、Y軸的變化。

幅值角度圖像梯度3.5圖像梯度實操importcv2

img=cv2.imread('data/0499.jpg')img=cv2.resize(img,dsize=None,fx=0.20,fy=0.20,interpolation=cv2.INTER_CUBIC)img=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)rst=cv2.Sobel(img,cv2.CV_64F,1,0)rst=cv2.convertScaleAbs(rst)cv2.imshow('img',img)cv2.imshow('rst',rst)cv2.waitKey()cv2.destroyAllWindows()①創(chuàng)建名為img_grad.py的Python文件,并添加3.5圖像梯度實操②運行看效果可見Y方向邊緣增強cv2.Sobel(img,cv2.CV_64F,1,0)被稱為索貝爾算子,依舊是卷積操作3.5圖像梯度實操importcv2

img=cv2.imread('data/0499.jpg')img=cv2.resize(img,dsize=None,fx=0.20,fy=0.20,interpolation=cv2.INTER_CUBIC)img=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)rst=cv2.Sobel(img,cv2.CV_64F,0,1)#修改了這里rst=cv2.convertScaleAbs(rst)cv2.imshow('img',img)cv2.imshow('rst',rst)cv2.waitKey()cv2.destroyAllWindows()②X方向增強:3.5圖像梯度實操②X方向增強:3.5圖像梯度實操③X、Y方向同時增強:importcv2

img=cv2.imread('data/0499.jpg')img=cv2.resize(img,dsize=None,fx=0.20,fy=0.20,interpolation=cv2.INTER_CUBIC)img=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)rst=cv2.Sobel(img,cv2.CV_64F,1,1)#修改了這里rst=cv2.convertScaleAbs(rst)cv2.imshow('img',img)cv2.imshow('rst',rst)cv2.waitKey()cv2.destroyAllWindows()3.5圖像梯度實操④強化邊緣:sobelx=cv2.Sobel(img,cv2.CV_64F,1,0,ksize=3)sobelx=cv2.convertScaleAbs(sobelx)cv2.imshow("sobelx",sobelx)

sobely=cv2.Sobel(img,cv2.CV_64F,0,1,ksize=3)sobely=cv2.convertScaleAbs(sobely)cv2.imshow('sobely',sobely)

#圖像疊加,得到邊緣信息sobelxy=cv2.addWeighted(sobelx,0.5,sobely,0.5,0)cv2.imshow("sobelxy",sobelxy)cv2.waitKey()cv2.destroyAllWindows()3.5圖像梯度實操④強化邊緣:cv2.addWeighted()

參數(shù)說明如下:src1:輸入的第一張圖片alpha:第一張圖片的權(quán)重src2:與第一張大小和通道數(shù)相同的圖片(即相同的image.shape)beta:第二張圖片的權(quán)重dst:輸出,在python中可以直接將dst放在前面作為輸出gamma:加到每個總和上的標(biāo)量,相當(dāng)于調(diào)節(jié)亮度3.5圖像梯度實操④反向輸出:#圖像疊加,得到邊緣信息sobelxy=cv2.addWeighted(sobelx,0.5,sobely,0.5,0)cv2.imshow("sobelxy",sobelxy)

#反向輸出sobelxy=cv2.subtract(255,sobelxy)cv2.imshow("sobelxy_invert",sobelxy)這里使用了OpenCV圖像的運算方法:add/substract等,可以閱讀OpenCV文檔,進行圖像操作練習(xí)3.5圖像梯度實操⑤更多算子:拉普拉斯(Laplacian)算子和坎尼(Canny)算子等laplacian=cv2.Laplacian(img,cv2.CV_64F)cannyEdge=cv2.Canny(img,100,200)cv2.imshow("laplacian",laplacian)cv2.imshow("canny",cannyEdge)cv2.waitKey()cv2.destroyAllWindows()063.6圖像清晰度評價項目實戰(zhàn)3.6.1圖像清晰度評價的意義圖像清晰度是衡量圖像質(zhì)量的一個重要指標(biāo)。對于相機來說,其一般工作在無參考圖像的模式下,所以在拍照時需要進行對焦的控制,對焦不準確,圖像就會變得比較模糊不清晰。相機對焦是一個調(diào)整的過程,圖像從模糊到清晰,再到模糊,確定清晰度峰值,再最終到達最清晰的位置。因此,對于成像裝置所獲得的一組圖像進行清晰度評價在工程上有著非常重要的應(yīng)用價值。圖像清晰度評價3.6.2圖像清晰度評價--Tenegrad梯度法③讀取圖像①下載圖片:位于/sgl_666/opencv/blob/master/code/chp3/data/circle.png②拷貝至項目data文件夾importmatplotlib.pyplotaspltimportnumpyasnpimportcv2ascvimportglob

#讀取圖片circle=cv.imread("data/circle.png")cv.imwrite("data/circle00.png",circle)3.6.2圖像清晰度評價--Tenegrad梯度法④創(chuàng)建評價數(shù)據(jù)集,利用不同層級的高斯模糊核函數(shù),這是常見的算法效果實驗方法之一blurrange=range(0,55,5)foriinblurrange:ifi==0:continueblur=cv.GaussianBlur(cv.imread("data/circle00.png"),(0,0),i)cv.imwrite(f"data/circle{i:02d}.png",blur)#顯示當(dāng)前結(jié)果images=sorted(glob.glob("data/*[0-9].png"))fig,axes=plt.subplots(2,len(images)//2)fori,axinenumerate(axes.flatten()):ax.imshow(cv.imread(images[i]))ax.annotate(f"SigmaX={i*5}",(0,0))ax.set_xticks([])ax.set_yticks([])plt.tight_layout()plt.show()3.6.2圖像清晰度評價--Tenegrad梯度法⑥運行,查看當(dāng)前結(jié)果3.6.2圖像清晰度評價--Tenegrad梯度法⑦定義Tenegrad清晰度評價函數(shù):deftenengrad(img,ksize=3):''''TENG'algorithm(Krotkov86)'''Gx=cv.Sobel(img,ddepth=cv.CV_64F,dx=1,dy=0,ksize=ksize)Gy=cv.Sobel(img,ddepth=cv.CV_64F,dx=0,dy=1,ksize=ksize)FM=Gx*Gx+Gy*Gymn=cv.mean(FM)[0]ifnp.isnan(mn):returnnp.nanmean(FM)returnmn3.6.2圖像清晰度評價--Tenegrad梯度法⑧評價之前創(chuàng)建的數(shù)據(jù)集:tenengrads=np.empty(len(images))fori,fileinenumerate(sorted(glob.glob("data/*[0-9].png"))):tenengrads[i]=tenengrad(cv.imread(file))print(tenengrads)⑨運行程序,輸出結(jié)果中第一張得分最高,和數(shù)據(jù)集清晰度排序一致:[2217.45916748310.19515991156.09831238104.1481018178.3343200762.6935424852.2946472244.7270660438.9986114534.4801025430.61637878]3.6.2圖像清晰度評價--Tenegrad梯度法⑩結(jié)果可視化fig,ax=plt.subplots()

ax.plot(blurrange[1:],tenengrads[1:],".")ax.set_xlabel("Gau?ianblursigmaX")ax.set_ylabel("Tenengrad")plt.tight_layout()plt.show()073.7小結(jié)及作業(yè)小結(jié)3.7小結(jié)及作業(yè)本章主要介紹了圖像濾波的相關(guān)操作,可以發(fā)現(xiàn),圖像卷積是一種常見的圖像處理方法。利用圖像卷積操作,我們通過低通濾波使得圖像變得平滑,通過高通濾波獲得圖像邊緣。另外,本章介紹了圖像梯度的概念,通過更多的圖像圖像卷積核算子,如索貝爾、拉普拉斯、坎尼等,可以獲得圖像的邊緣。通過代碼實戰(zhàn)得出,圖像梯度共有橫向Gx和縱向Gy兩個方向,圖像每個像素的梯度和梯度方向可以表示為:

3.7小結(jié)及作業(yè)作業(yè):1、查閱資料,了解圖像噪聲產(chǎn)生的原因,除了教材上提到的圖像噪聲,還有哪些噪聲?舉例說明。2、列舉OpenCV內(nèi)置的圖像平滑濾波函數(shù),采用不同的卷積核,觀察圖像平滑效果,并用代碼實現(xiàn),采用matplotlib.pyplot進行可視化輸出3、除了Tenegrad梯度清晰度評價算法,還有哪些清晰度評價方法,實現(xiàn)并比較各種方法的優(yōu)缺點。計算機視覺--OpenCV圖像處理教程第四章圖像亮度及對比度OPENCVENVIRONMENTSETTTING內(nèi)容要點:圖像直方圖的概念、圖像直方圖均衡化、圖像亮度調(diào)整、圖像對比度調(diào)整、項目實戰(zhàn):交互式圖像增強建議課時:6課時講課時間:2024年8月9日目錄4.1圖像直方圖概念及可視化理論+實操4.2直方圖均衡化理論+實操4.3直方圖的掩膜操作理論+實操4.4圖像亮度調(diào)整理論+實操4.5圖像對比度調(diào)整理論+實操4.6交互式圖像增強項目實戰(zhàn)4.7小結(jié)及作業(yè)理論講解014.1圖像直方圖概念及可視化理論+實操4.1.1圖像直方圖的概念圖像直方圖ImageHistogram圖像直方圖是用以表示數(shù)字圖像中亮度分布的一種柱狀圖,X軸為圖像的亮度值,Y軸標(biāo)繪了圖像中每個亮度值的像素個數(shù)。其橫坐標(biāo)的左側(cè)為較暗的區(qū)域,而右側(cè)為較亮的區(qū)域。一張較暗圖片的直方圖中的數(shù)據(jù)多集中于左側(cè)和中間,而整體明亮,只有少量陰影的圖像則數(shù)據(jù)多集中與右側(cè)和中間。4.1.2圖像直方圖可視化②創(chuàng)建calc_hist.py①下載圖像/sgl_666/opencv/blob/master/code/chp4/data/0179.png,保存到data文件夾③輸入代碼:importcv2importmatplotlib.pyplotasplt

#讀取圖像img=cv2.imread("data/0179.png")histr=cv2.calcHist([img],[0],None,[256],[0,256])#顯示圖像plt.imshow(img[:,:,::-1])plt.show()

#顯示圖像直方圖plt.plot(histr)plt.grid()plt.show()參數(shù)意義如下:images:原圖像。當(dāng)傳入函數(shù)時應(yīng)該用中括號[]括起來,例如:[img]。channels:如果輸入圖像是灰度圖,它的值就是[0];如果是彩色圖像,傳入的參數(shù)可以是[0],[1],[2],它們分別對應(yīng)著通道B,G,R。mask:掩膜圖像。要統(tǒng)計整幅圖像的直方圖就把它設(shè)為None。但是如果想統(tǒng)計圖像某一部分的直方圖,就需要一個掩膜圖像,并使用它。histSize:bin的數(shù)目,即將灰度區(qū)間分多少段來進行統(tǒng)計。也應(yīng)該用中括號括起

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論