python影象處理工具opencv練習:比較影象差異!
為了計算兩幅影象之間的差異,我們將利用Wang等人介紹的結構相似性指數:Image Quality Assessment: From Error Visibility to Structural Similarity。此方法已在scikit-image庫中實現,論文下載: https://itbooks.pipipan.com/fs/18113597-326895607 。
首先需要安裝Python,OpenCV,scikit-image和imutils。
計算影象差異
你能發現這兩個影象之間的區別嗎?
圖片.png
程式碼:
執行結果
圖片.png
原始碼: https://github.com/china-testing/python-api-tesing/blob/master/practices/cv/image_diff_pil.py
程式碼及配套圖片: https://itbooks.pipipan.com/fs/18113597-326879233
使用scikit-image中的compare_ssim函式,我們計算得分和差異影象diff。
分數表示兩個輸入影象之間的結構相似性指數。 該值在[-1,1]範圍內,值為1是“完美匹配”。
差異影象包含我們希望視覺化的兩個輸入影象之間的實際影象差異。 差異影象當前表示為[0,1]範圍內的浮點資料型別,因此我們首先將陣列轉換為[0,255]範圍內的8位無符號整數,然後我們才能使用OpenCV進一步處理它 。
然後我們找到輪廓,以便我們可以在標識為“不同”的區域周圍放置矩形。
。我們使用門限cv2.THRESH_BINARY_INV和cv2.THRESH_OTS。參考: https://docs.opencv.org/trunk/d7/d4d/tutorial_py_thresholding.html 。
下面圖4中的影象清楚地顯示了已被操縱的影象的ROI:
圖片.png
我們將輪廓儲存在列表中,併為影象的不同區域周圍繪製矩形:
使用cv2.boundingRect函式計算輪廓周圍的邊界框。然後我們使用這些值在cv2.rectangle的影象上繪製紅色矩形。此時可以基於長寬,過濾掉過小的矩形區域。
執行: python image_diff.py --first images/original_01.png --second images/modified_01.png
圖片.png
參考資料
- how to compare two images with Python
- python測試開發專案實戰-目錄
- python工具書籍下載-持續更新
- python 3.7極速入門教程 - 目錄
- 討論qq群630011153 144081101
- 本文涉及的python測試開發庫 謝謝點贊!
- [本文相關海量書籍下載]( https://github.com/china-testing/python-api-tesing/blob/master/books.md
- http://scikit-image.org/docs/dev/api/skimage.measure.html#skimage.measure.compare_ssim
更多例項
$ python image_diff.py --first images/original_02.png --second images/modified_02.png
圖片.png
$ python image_diff.py --first images/original_03.png --second images/modified_03.png
進群:960410445 即可獲取原始碼!
私信菜鳥007獲取神祕驚喜!