「python opencv視覺零到實戰」八、圖片選區操作

2021-01-12 1bit愛學習

一、學習目標

了解什麼是ROI了解floodFill的使用方法如有錯誤歡迎指出~

目錄

「python opencv 計算機視覺零基礎實戰」 第一節

「python opencv視覺入門到實戰」二、格式與攝像頭

「python opencv 視覺入門到實戰」 三、圖像編輯

「python opencv視覺入門到實戰」 第四節色彩空間

「python opencv視覺入門到實戰」 五、對象追蹤

「python opencv視覺零基礎到實戰」 六、圖像運算

「python opencv視覺零基礎實戰」 七邏輯運算應用

二、了解OpenCV中圖像ROI的顏色填充

2.1 了解ROI是什麼

ROI指的是region of Interest,翻譯過來就是你所感興趣的區域。若在一張圖片中,你感興趣的是某一個區域,那麼這個區域就可以稱為ROI。我們通過一些方法選取了該區域後,可以進行操作;例如顏色填充、圖像變換等編輯。

現有一張圖如下:

我們對這張圖的雷射雕刻機部分感興趣,那麼就可以選取該部分。如何進行選取呢?我們可以通過代碼得知該圖片的大小:

import cv2img = cv2.imread(r'C:\Users\mx\Desktop\111.png')dst=cv2.medianBlur(img,5)得到該圖片的高寬分別為447與755。

我們可以通過粗略的丈量得知雷射雕刻機應在整個圖片的正中央,那麼寬應該為一半,大致在200到400之間;由於圖片中雷射雕刻機位於圖片偏下部分,所以可以粗略得知高度在200至400之間。這時我們可以直接讀取圖片後獲取指定的行列得到該區域圖片。

cv2.imshow("img", dst)cv2.waitKey (0)cv2.destroyAllWindows()以上代碼讀取圖片後,通過選取圖片區域進行ROI選擇。img[200:400,200:400]代碼中,第一個200:400指的是200指400行,第二個200:400指的是200至400列。通過兩個選取的行與列的交叉區域則是所選擇的ROI區域。圖示如下,紅色框框表示列,紫色框框表示行,其中重疊區域則是ROI選擇區域。

以上代碼在運行結果如下:

從結果中,我們可以知道,該值的列選擇還應該往右邊移動一部分,由於我們是200至400這個區域,那麼我們現在應該移動的訪問從圖片上看,應該是接近300指500。修改代碼。

dst=cv2.blur(img,(2,24))運行後最後得到如下結果:

我們得到ROI內容後,可以對該部分的內容進行編輯,例如轉為灰度圖像:

cv2.GaussianBlur( SRC,ksize,sigmaX )結果如下:

也可以將轉換後的圖片與原圖進行結合,只需要將轉換後的圖片值對原圖該區域的值進行替換即可,完整代碼如下:

dst=cv2.GaussianBlur(img,(0,0),20) 在以上代碼中需要注意的是,灰度圖像必須轉為RGB圖形才能對原圖進行賦值。以上代碼中灰度轉RGB圖像的代碼為:

gray_roi_rgb = cv2.cvtColor(gray_roi, cv2.COLOR_GRAY2BGR)最終運行結果如下:

2.2 泛洪填充及floodFill使用方法

泛洪填充指指定起始點,通過該像素點所連結的周圍像素點在所指定的顏色值範圍內進行顏色填充。該操作需要一個遮罩或者說掩膜進行運算處理。

首先我們依舊開始讀取一張圖像:

import cv2img = cv2.imread(r'C:\Users\mx\Desktop\111.png')h,w,c=img.shape接著通過copy方法可以快速複製一張圖片:

for row in range(h): for col in range(w): b=img[row,col,0] g=img[row,col,1] r=img[row,col,2]由於我們需要建立一個遮罩,這個遮罩跟原圖片大小一致,所以代碼可以寫成如下:

srand=np.random.normal(0,30,3)img[row,col,0]=b+srand[0]img[row,col,1]=g+srand[1]img[row,col,2]=r+srand[2]以上代碼通過shape獲取了原圖片的高寬,接著通過zeros創建一個與原圖大小一致的純黑圖片。那為什麼要加2呢?因為接下來我們需要對圖片進行顏色填充,官方的規定要+2,具體什麼原因我本人沒有進行深究,按照官方要求來就可以了。

那問題來了,遮罩是什麼?還記得我們在邏輯運算應用那一個小節中,通過色彩提取後,可以得到目標對象的顏色範圍,這個顏色範圍是一張黑白圖片,白色為選取的區域,黑色為不選取的區域,這時我們通過將提取出來的圖片作為遮罩對圖片進行bitwise_and運算,這時就可以還原出原本色彩,摳選出原圖中的圖像內容。其實遮罩的作用就是如此,我們通過zeros創建一張純黑圖片後,使用floodFill函數對指定目標進行填充;在填充之前,將進行一定的計算。由於floodFill函數將會選取出目標點,該目標點將作用在這張純黑色的遮罩圖片中,該純黑圖片將會對計算後選取的點進行指的變換,該區域就會變成白色,最終得到顏色填充的區域,進行填充。

我們首先看一下floodFill函數,floodFill函數接收7個參數,函數原型如下:

floodFill(image, mask, seedPoint, newVal, loDiff=None, upDiff=None, flags=None)image為傳入的圖像參數mask為遮罩seedPoint為選中的顏色填充的起始點newVal填充的顏色像素值loDiff選中起始點的顏色像素值的最低範圍,例如是紅色,那麼紅色減去該值後得到最低的取值範圍upDiff選中起始點的顏色像素值的最高範圍,例如是紅色,那麼紅色加該值後得到最高的取值範圍flags為CV_FLOODFILL_FIXED_RANGE或者CV_FLOODFILL_MASK_ONLY,兩者填充方式不一樣,當前示例將講解CV_FLOODFILL_FIXED_RANGE。若選擇CV_FLOODFILL_FIXED_RANGE,則會比較像素點與其實像素點,若在顏色值的範圍內,則進行填充。此時我們調用floodFill方法,傳入圖片,遮罩,起始點,填充的顏色值,最低值,最高值與填充模式。cv2.floodFill(copyimg, mask, (220,420), (0, 255, 255), (5, 5, 5), (5, 5 ,5), cv2.FLOODFILL_FIXED_RANGE)copyimg為圖片;mask為遮罩;220,420為起始點;0, 255, 255為填充的顏色,為黃色;5, 5, 5為選中的起始點減去該顏色值,判斷周圍的顏色是否低於該值;5, 5 ,5為選中的起始點加上該顏色值,判斷周圍的顏色是否高於該值。最終的完整代碼如下:img = cv2.imread(r"C:\Users\Administrator\Desktop\1.jpg")cv2.imshow(「img」, img)

在複製圖像上進行操作

import cv2import numpy as npimg = cv2.imread(r"C:\Users\Administrator\Desktop\1.jpg")cv2.imshow("img", img)copyimg = img.copy()h, w = copyimg.shape[:2]mask = np.zeros([h + 2, w + 2], np.uint8)cv2.floodFill(copyimg, mask, (220,420), (0, 255, 255), (5, 5, 5), (5, 5 ,5), cv2.FLOODFILL_FIXED_RANGE)cv2.imshow("fill_color", copyimg)cv2.waitKey (0)#等待關閉cv2.destroyAllWindows()#destroy運行結果如下:

我們現在可以證明220,420是否是起始點,我們可以換一個值,例如0,0。若在左上角進行顏色填充那麼則判斷正確:

我們也可以改變填充值的選擇範圍,將2個5,5,5改為50,50,50,可以明顯看到效果:

dst=cv2.GaussianBlur(img,(5,5),0)這時候的相關所連結的顏色範圍擴大,那麼所能填充的範圍也肯定是擴大,運行結果如下:

其中顏色值可以可以進行修改,修改方法不再贅述。

該系列文章首發於ebaina,了解更多可查看擴展連結。

三、總結

了解了ROI是感興趣的選擇範圍了解了ROI可以通過圖片內容進行選擇,並且可以與原圖進行結合了解了泛洪填充的方法初步了解了mask遮罩以及floodFill函數的使用方法

相關焦點

  • 「python opencv視覺零基礎」十、圖片效果毛玻璃
    一、學習目標了解高斯模糊的使用方法了解毛玻璃的圖片效果添加了解如何自己做一個噪聲圖片目錄「python opencv 計算機視覺零基礎實戰」 第一節「python opencv視覺入門到實戰」二、格式與攝像頭「python opencv 視覺入門到實戰」 三、圖像編輯「python opencv視覺入門到實戰
  • 「python opencv計算機視覺零基礎到實戰」九模糊
    一、學習目標了解什麼是卷積了解模糊的使用方法與應用目錄「python opencv 計算機視覺零基礎實戰」 第一節「python opencv視覺入門到實戰」二、格式與攝像頭「python opencv 視覺入門到實戰」 三、圖像編輯「python opencv視覺入門到實戰」 第四節色彩空間
  • 「python opencv視覺零基礎」十四、直方圖反向投影
    前文提醒:博主正在參加博客之星評比,成功入選Top200,現在暫居第九歡迎各位點擊了解更多幫我投票,非常感謝~目錄「python opencv 計算機視覺零基礎實戰」 第一節「python opencv視覺入門到實戰」二、格式與攝像頭「python opencv 視覺入門到實戰」 三、圖像編輯「python
  • 「python opencv視覺零基礎實戰」七邏輯運算應用
    一、學習目標了解opencv中圖像的邏輯運算了解opencv中邏輯運算的應用如有錯誤歡迎指出~目錄「python opencv 計算機視覺零基礎實戰」 第一節「python opencv視覺入門到實戰」二、格式與攝像頭「python opencv 視覺入門到實戰」 三、圖像編輯「python
  • 世界上最好的語言PHP:OpenCV與計算機視覺已在我掌控之下
    現今,「機器學習」發展迅速,並有大量相關的文章,包括那些 Medium 上的博客,同時幾乎每位開發人員都開始在工作任務和本地項目中使用機器學習,但是從何處開始以及使用什麼方法總是令人困惑的。大多針對初學者的文章提供了一堆文獻,在閱讀中發現這些文章脫離生活,或提供一些「價」的課程等。
  • 如何快速簡單的安裝opencv-python
    這樣就會從清華鏡像安裝opencv-contrib-python庫。目前opencv最新版本為4.1.1 ----2019-8-28在opencv-contrib-python 版本中含有額外模塊( Extra modules ),而 opencv-python 版本中只含有基礎模塊。
  • Python中如何利用Opencv打開視頻或圖像並用PyQt控制項顯示
    OpenCV是一個基於BSD許可(開源)發行的跨平臺計算機視覺庫,可以運行在Linux、Windows、Android和Mac OS作業系統上,使用起來十分方便,把它與PyQt結合起來,就可以順利的操作視頻、圖像了。具體安裝請自行百度,這裡介紹使用方法。
  • opencv-python圖像預處理-濾波
    為了消除外界環境對圖像採集的幹擾,增強圖像的邊緣及灰度跳變的部分,使圖像變得清晰以及提高圖像處理速度需要對圖像進行預處理操作,主要是對圖像進行濾波和增強操作。使用的方法可以分為空間域處理和頻率域處理兩類。空間域指圖像平面本身,這類圖像處理方法用各種模板直接與圖像進行卷積運算,實現對圖像的處理。
  • 使用OpenCV和Python構建自己的車輛檢測模型
    utm_source=blog&utm_medium=vehicle-detection-opencv-python)利用深度學習的計算機視覺(https://courses.analyticsvidhya.com/courses/computer-vision-using-deep-learning-version2?
  • opencv-python獲取圖像:面向對象與面向過程
    這裡需要注意以下,opencv讀取圖片默認通道為BGR的格式,當在其他UI用戶界面顯示圖像時注意轉換一下通道順序,例如BGR轉換成RGB:Image1=cv2.cvtColor(image, cv2.COLOR_BGR2RGB)下面讀取一張圖片並顯示
  • 「python學習手冊-筆記」003.數值類型
    「這不是演習!」好了,從本章開始,我們就要正式進入python的學習.所涉及的內容深度會有所提升,但是還到不了學習完1+1=2之後就開始微積分推導的陡峭程度. 相關的補充內容我會以知識點補充或者外鏈的方式添加進來.
  • 基於opencv 的圖像處理入門教程
    前言雖然計算機視覺領域目前基本是以深度學習算法為主,但實際上很多時候對圖片的很多處理方法,並不需要採用深度學習的網絡模型,採用目前成熟的圖像處理庫即可實現,比如 OpenCV 和 PIL ,對圖片進行簡單的調整大小、裁剪、旋轉,或者是對圖片的模糊操作。
  • 基於python+OpenCV模塊的人臉識別定位技術
    什麼是OpenCV模塊OpenCV是一款跨平臺的視覺庫,可以支持的作業系統有Linux、Windows和Mac OS作業系統,並且還提供了多種語言的接口,比如Python,java,MATLAB等常用語言。
  • 「深度學習之opencv」Mat數據的矩陣輸出
    C++中使用opencv的時候,我們有事想看一下我們的圖像的數據,那麼怎麼將一個圖像數據輸出呢?sizeMat的默認輸出風格:默認風格Mat的Python輸出風格,就是python實際上,這不僅限於深度學習和計算機視覺,還包括模型算法原理,模型訓練,模型轉換優化,模型部署和深度學習框架。此外,還有C ++,數據結構和編譯底層等。歡迎大家的關注,我們將共同探討進步。
  • OpenCV中的快速直線檢測
    本文範例運行環境FastLineDetectors運行必要條件FastLineDetectors屬於opencv-contrib中的模塊,需要安裝opencv-contrib-python。在python的opencv相關的安裝包中,opencv-python 包含主要模塊,opencv-contrib-python 包含主要模塊以及一些擴展模塊。但這兩個模塊並不兼容,如果已經安裝過opencv-python,需要先卸載,再安裝opencv-contrib-python。
  • 使用Python中OpenCV庫創建一幅圖片的RGB通道圖片
    我們知道,在使用PhotoShop進行圖片的摳取、創建和存儲選區、存儲圖像的色彩資料等複雜操作時,經常會用到一個功能,那就是「RGB」通道,它能從三原色角度對一幅圖片進行精準處理。我們在驚嘆PhotoShop中RGB通道功能強大的同時,是否想過它是如何實現的呢?
  • 基於TensorFlow 、OpenCV 和 Docker 的實時視頻目標檢測
    /python3.5/dist-packages/tensorflow/modelsRUN apt-get install -y protobuf-compiler python-pil python-lxml python-tk#Set TF object detection availableENV PYTHONPATH "$PYTHONPATH:/usr
  • PyAutoGUI:自動化鍵鼠操作的Python類庫
    隨便挑了一張看起來比較高端的圖片有些朋友可能玩過按鍵精靈,一個用來操作鍵盤滑鼠完成一些自動化工作的軟體。其實如果你學了Python的話,完全用不著按鍵精靈這種東西了。因為廣泛的Python類庫裡,就有PyAutoGUI這樣可以變成控制鍵盤滑鼠的類庫,有了它,就可以用Python隨心所欲的操作電腦了。
  • Python類庫Pillow實現圖片裁剪、縮放、效果增強等功能
    python注意事項1、 Pillow和PIL不能共存;pip更新2、 easy_install 安裝,安裝命令:easy_install Pillow3、 從 PyPI 下載包,解壓安裝python用於圖像歸檔和圖像批量處理,你可以使用它建立縮略圖,轉換格式,列印圖片等等,現在的版本可以驗證和讀取大量的圖片格式。
  • 資料| Practical Python and OpenCV 一周時間帶你入門CV