1. 程式人生 > 其它 >OpenCV程式設計實踐小結

OpenCV程式設計實踐小結

技術標籤:OpenCVOpenCVPython


1. 影象資料檔案讀取合法性檢查

當我們使用opencv讀取圖片或者使用Deep learning讀取資料集時,如果圖片有問題則會造成錯誤!

如何檢測一個資料夾內所有圖片是否都沒有錯誤呢?這裡總結以下程式碼。

1.使用os模組

  • 判斷資料夾是否存在

importos

os.path.exists(test_dir)

#True

os.path.exists(no_exist_dir)

#False

可以看出用os.path.exists()方法,判斷檔案和資料夾是一樣。

該方法通過判斷檔案路徑是否存在和各種訪問模式的許可權返回True或者False。

importos

ifos.access("/file/path/foo.txt",os.F_OK):

print"Given file path is exist."

ifos.access("/file/path/foo.txt",os.R_OK):

print"File is accessible to read"

ifos.access("/file/path/foo.txt",os.W_OK):

print"File is accessible to write"

ifos.access("/file/path/foo.txt",os.X_OK):

print"File is accessible to execute"

2.使用Try-open()語句

try:

f=open()

f.close()

exceptIOError:

print"File is not accessible."

使用try語句進行判斷,處理所有異常非常簡單和優雅的。而且相比其他不需要引入其他外部模組。

3. 使用pathlib模組

pathlib模組在Python3版本中是內建模組,但是在Python2中是需要單獨安裝三方模組。

使用pathlib需要先使用檔案路徑來建立path物件。此路徑可以是檔名或目錄路徑。

  • 檢查路徑是否存在

path=pathlib.Path("path/file")

path.exist()

  • 檢查路徑是否是檔案

path=pathlib.Path("path/file")

path.is_file()

#!usr/bin/env python
# -*- coding:utf-8 _*-
"""
@Time   :   2020/12/29 0029  8:50
@Author :   HaoWANG,
@Email  :   [email protected]
@file   :
@Software : Pycharm
@Description:  
"""

import os
import pathlib
import cv2 as cv
import numpy as np

img_path = "pictures/dog.jpg"

#

# 方法1 : (推薦) try直接使用open()方法來檢查檔案是否存在和可讀寫。
# try:
#     img_file = open(img_path)  # 若能open, 則表示無誤;若圖片有問題這裡會有error
#     img_file.close()
#     img_src = cv.imread(img_path)
#
# except IOError:
#     print(img_path + ' ' + 'have problem!')
#     pass

 # 方法2: 使用pathlib模組
# 檢查路徑是否存在

# path = pathlib.Path(img_path)
# path.exists()
#
# if path.exists() is True:
#     img_src = cv.imread(img_path)

# 方法3: 推薦-使用os模組
# os模組中的os.path.exists()方法用於檢驗檔案是否存在。

if not (os.path.exists(img_path) and
        os.access(img_path, os.R_OK)):
    # 判斷檔案路徑是否存在; 檢查檔案是否可讀
    print(img_path + ' ' + 'have problem!')
    print("ERROR : File is not exists or un-accessible to read")
else:
    print("--------------------------")
    print("File is accessible to read")
    window_name = "Input Image"
    cv.namedWindow(window_name, cv.WINDOW_AUTOSIZE)
    img_src = cv.imread(img_path)
    lower_reso = cv.pyrDown(img_src)
    cv.imshow(window_name,lower_reso)
    cv.waitKey(0)
    cv.destroyAllWindows()