Python+Opencv寻找图像中最亮的区域
目錄
- 一、場景需求解讀
- 二、算法原理簡介
- 三、算法代碼實現
- 四、代碼運行步驟
- 五、算法效果展示和分析
- 六、思維擴展
- 參考資料
- 注意事項
一、場景需求解讀
??在有些現實場景中,我們需要去使用算法自動的尋找到圖片中的最亮的區域,這個區域是我們感興趣的目標所在的位置,比較典型的是一個應用是視網膜圖像,圖像中視網膜所在的位置比較亮,而其它地方比較暗,我們更加關注視網膜所在的區域,因而需要使用算法自動的尋找到這個區域,然后針對這個區域進行處理和分析。下圖展示了一個樣例圖片。
二、算法原理簡介
??要檢測出圖像中最亮的區域,我們可以直接使用opencv中自帶的函數(minVal, maxVal, minLoc, maxLoc) = cv2.minMaxLoc(gray),該函數是用來獲取圖像中的最大值和最小值 所在的位置,而圖像中的最大值其實就是最亮的像素點,圖像中的最小值其實就是最暗的像素點,該函數的輸入參數是一張灰度圖像,該函數會返回最大值、最小值、最大值所在位置和最小值所在位置等,我們可以根據獲得的位置信息繪制結果。
三、算法代碼實現
# coding=utf-8 # 導入python包 import numpy as np import argparse import cv2# 構建并解析參數 ap = argparse.ArgumentParser() ap.add_argument("-i", "--image", help = "path to the image file") ap.add_argument("-r", "--radius", type = int, help = "radius of Gaussian blur; must be odd") args = vars(ap.parse_args())# 讀取圖片并將其轉化為灰度圖片 image = cv2.imread(args["image"]) orig = image.copy() gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)# 利用cv2.minMaxLoc尋找到圖像中最亮和最暗的點 (minVal, maxVal, minLoc, maxLoc) = cv2.minMaxLoc(gray) # 在圖像中繪制結果 cv2.circle(image, maxLoc, 5, (255, 0, 0), 2)# 應用高斯模糊進行預處理 gray = cv2.GaussianBlur(gray, (args["radius"], args["radius"]), 0) (minVal, maxVal, minLoc, maxLoc) = cv2.minMaxLoc(gray) image1 = orig.copy() cv2.circle(image1, maxLoc, args["radius"], (255, 0, 0), 2)# 顯示結果 result = np.hstack([orig, image, image1]) cv2.imwrite("region5.png", result) cv2.imshow("Robust", result) cv2.waitKey(0)四、代碼運行步驟
- 步驟1-打開一個cmd界面;
- 步驟2-cd /d xxx 切換到代碼所在的絕對路徑中,xxx表示代碼所在的具體路徑;
- 步驟3-python find_region.py -i img5.png -r 59 運行代碼,-i表示設置測試圖片,-r表示設置顯示的半徑大小。
五、算法效果展示和分析
??上圖展示了該算法的運行結果。每一行表示一個測試案例,第1列表示的是輸入的原圖,第2列表示的是原始的輸出結果,即直接使用cv2.minMaxLoc函數的結果,這個函數可以輸出圖像中最亮的點和最暗的點所在的具體位置和對應的值,但是它容易受到噪聲的干擾,第2行第2列輸出了錯誤的結果;第3列表示的是預處理之后的結果,即首先使用高斯函數進行去噪處理,然后再使用cv2.minMaxLoc函數的效果,通過觀察圖中的結果,我們可以發現改進后的效果更佳明顯,準確的檢測到了圖像中最亮的區域,滿足了我們的要求。需要注意的是,用戶需要根據輸入圖片的大小去調節–radius參數的值,該值必須為奇數。
六、思維擴展
??對于本文的這個任務而言,其實還可以用其它的思路很好的實現,一個可行的思路是使用圖像二值化+尋找圖像中的最大輪廓來實現,主要的原始是因為眼球和其它區域之間具有較大的顏色差異,可以通過設置一個合適的閾值來講它們區分開來,然后在這個二值圖像中尋找最大的輪廓就可以找到我們的目標,尋找最大輪廓的目的是因為圖像中會含有一些其它的噪聲,比如其它區域中比較小的亮區域,具體的代碼實現就留給聰明的你來實現啦。
參考資料
[1] 參考鏈接
注意事項
[1] 該博客是本人原創博客,如果您對該博客感興趣,想要轉載該博客,請與我聯系(qq郵箱:1575262785@qq.com),我會在第一時間回復大家,謝謝大家的關注.
[2] 由于個人能力有限,該博客可能存在很多的問題,希望大家能夠提出改進意見。
[3] 如果您在閱讀本博客時遇到不理解的地方,希望您可以聯系我,我會及時的回復您,和您交流想法和意見,謝謝。
[4] 本文測試的圖片可以通過該鏈接進行下載。網盤鏈接-提取碼:lvah。
[5] 本人業余時間承接各種本科畢設設計和各種小項目,包括圖像處理(數據挖掘、機器學習、深度學習等)、matlab仿真、python算法及仿真等,有需要的請加QQ:1575262785詳聊!!!
總結
以上是生活随笔為你收集整理的Python+Opencv寻找图像中最亮的区域的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 猎豹免费wifi怎么用 猎豹免费wifi
- 下一篇: c盘清理工具哪个好(2022最新版)