[OpenCV][Python]避免路徑中的反斜槓 \ 需要轉義的問題

更新於 發佈於 閱讀時間約 6 分鐘

在 Python 中,處理檔案路徑時,反斜槓 \ 是一個特殊的字元,它常用於轉義序列(例如 \n 代表換行符號)。

因此,如果你直接在字串中使用反斜槓,可能會產生轉義字元的誤解。為了避免路徑中的反斜槓 \ 需要轉義的問題,這種情況下會導致路徑解析錯誤。

本文將提供幾種方法來解決此問題。


先試著用VScode,右鍵點擊複製路徑

直接用這路徑來讀圖看看

D:\python\crab\d\111.jpg
raw-image



程式範例

直接用複製的路徑,python會把\當作轉義符號,就無法正常讀取圖片。

import cv2

file_path = 'D:\python\crab\d\111.jpg'
img = cv2.imread(file_path)

if img:
cv2.imshow('img',img)
cv2.waitKey(0)
cv2.destroyAllWindows()
else:
print('未讀取到圖片')
raw-image




可以使用以下幾種方法來輕鬆處理 路徑的問題:

1. 使用 原始字符串 r''

你可以直接使用原始字符串的方式來避免反斜槓轉義問題,這樣每個反斜槓會被視為普通字符,不需要手動進行轉換:

import cv2
file_path = r'D:\python\crab\d\111.jpg'
img = cv2.imread(file_path)

if img is None:
print('未讀取到圖片')
else:
cv2.imshow('img',img)
cv2.waitKey(0)
cv2.destroyAllWindows()

這樣就能正常地讀取到圖片了

raw-image

2. 使用 pathlib

Python 的pathlib 提供了更方便、跨平台的處理路徑的方法,這樣你就不必手動調整 \/,這些方法會自動根據你的操作系統格式化路徑。

使用 pathlib

pathlib 是更現代化的路徑處理工具,特別適合跨平台的應用,可以自動管理路徑分隔符號。

from pathlib import Path
import cv2

# 使用 pathlib 處理路徑
file_path = Path("D:/python/crab/d/111.jpg")

# 讀取圖片
image = cv2.imread(file_path)

if image is None:
print('未讀取到圖片')
else:
print('有讀取到圖片')
raw-image

這樣,你就可以不再擔心路徑分隔符號的轉換問題,pathlib 會自動根據操作系統處理路徑。Windows 上仍然會使用反斜槓顯示,但不需要手動轉換。

3. 使用 雙斜槓 \\

如果你堅持使用普通字符串,也可以用雙斜槓 \\ 來表示路徑中的反斜槓,這樣可以避免反斜槓的轉義問題,但不建議因為不美觀,也會有隱藏的問題存在

import cv2

# 使用 pathlib 處理路徑
file_path = "D://python//crab//d//111.jpg"

# 讀取圖片
image = cv2.imread(file_path)

if image is None:
print('未讀取到圖片')
else:
print('有讀取到圖片')

使用 雙斜槓 \\隱藏問題或不便:

  1. 跨平台兼容性
    • 使用雙斜槓適用於 Windows,但如果你的代碼需要在 Linux 或 macOS 上運行,它們使用的是正斜槓 / 作為路徑分隔符號。儘管 Python 自動處理 Windows 和 Linux 之間的路徑分隔符(反斜槓和正斜槓),但在多個系統中混合使用雙斜槓和正斜槓可能會讓代碼變得不易讀、難以維護。
  2. 代碼可讀性降低
    例如:
    path = "D:\\python\\project\\data\\images\\test.jpg"
    • 雙斜槓 \\ 在路徑中看起來比較冗長,尤其是在長路徑中。這會降低代碼的可讀性,讓人難以快速理解這段代碼,特別是在路徑中有許多文件夾時。
  3. 易出錯
    • 如果忘記了某處應該使用雙斜槓,可能會導致難以追蹤的錯誤。例如,單斜槓 \n 是換行符,\t 是製表符,這樣的情況可能會導致路徑解析錯誤,或者出現奇怪的轉義行為。
  4. 不符合現代化編程風格
    • 在 Python 3.4 引入 pathlib 之後,處理路徑的現代化方法(如 pathlib.Path)更推薦,這樣能自動處理跨平台的路徑問題,讓代碼更加一致並且容易維護。



建議的替代方案:

最方便的方法是使用 pathlib原始字符串 r'',這樣不僅解決了路徑分隔符號的問題,還能讓你的代碼更加跨平台和易讀。

留言
avatar-img
留言分享你的想法!
avatar-img
螃蟹_crab的沙龍
143會員
253內容數
本業是影像辨識軟體開發,閒暇時間進修AI相關內容,將學習到的內容寫成文章分享。
螃蟹_crab的沙龍的其他內容
2025/01/01
錯誤訊息 Makefile:221: *** found no data/foo-ground-truth/*.gt.txt for data/foo/all-gt. Stop. 原先指令 ALL_FILES = $(and $(wildcard $(GROUND_TRUTH_DIR)),$
Thumbnail
2025/01/01
錯誤訊息 Makefile:221: *** found no data/foo-ground-truth/*.gt.txt for data/foo/all-gt. Stop. 原先指令 ALL_FILES = $(and $(wildcard $(GROUND_TRUTH_DIR)),$
Thumbnail
2024/10/12
在有次使用cv2.resize時忽然報錯,就心血來潮不想重新安裝OpenCV,根據缺少的東西想辦法補齊。 在影像處理中,Zlib(以及 zlibwapi.dll)主要用於處理數據壓縮和解壓縮,特別是在處理大型影像文件時。 遺失原因 應用程序安裝過程中未能完整安裝所有所需的依賴項,尤其是 zli
Thumbnail
2024/10/12
在有次使用cv2.resize時忽然報錯,就心血來潮不想重新安裝OpenCV,根據缺少的東西想辦法補齊。 在影像處理中,Zlib(以及 zlibwapi.dll)主要用於處理數據壓縮和解壓縮,特別是在處理大型影像文件時。 遺失原因 應用程序安裝過程中未能完整安裝所有所需的依賴項,尤其是 zli
Thumbnail
2024/10/11
在上一篇文章,使用CUDA加速運行OpenCV發現一個異常,抽絲剝繭找到原因了。 [Python]在 OpenCV 中啟用 CUDA 加速來運行 DNN 超分辨率模型 錯誤描述: Could not locate cublas64_11.dll. Please make sure it i
Thumbnail
2024/10/11
在上一篇文章,使用CUDA加速運行OpenCV發現一個異常,抽絲剝繭找到原因了。 [Python]在 OpenCV 中啟用 CUDA 加速來運行 DNN 超分辨率模型 錯誤描述: Could not locate cublas64_11.dll. Please make sure it i
Thumbnail
看更多
你可能也想看
Thumbnail
「欸!這是在哪裡買的?求連結 🥺」 誰叫你太有品味,一發就讓大家跟著剁手手? 讓你回購再回購的生活好物,是時候該介紹出場了吧! 「開箱你的美好生活」現正召喚各路好物的開箱使者 🤩
Thumbnail
「欸!這是在哪裡買的?求連結 🥺」 誰叫你太有品味,一發就讓大家跟著剁手手? 讓你回購再回購的生活好物,是時候該介紹出場了吧! 「開箱你的美好生活」現正召喚各路好物的開箱使者 🤩
Thumbnail
1. 概述 在光學字符識別(OCR)過程中,常見的問題之一是「斷字」,即原本應為一個完整字符的部分被錯誤地分割成兩個或多個獨立的字符。這通常發生在掃描文件、圖像降噪或影像二值化處理後。本篇文章將介紹一種基於 骨架化端點距離分析 的斷字檢測方法,並提供完整的 Python 實作。 2. 斷字檢測的
Thumbnail
1. 概述 在光學字符識別(OCR)過程中,常見的問題之一是「斷字」,即原本應為一個完整字符的部分被錯誤地分割成兩個或多個獨立的字符。這通常發生在掃描文件、圖像降噪或影像二值化處理後。本篇文章將介紹一種基於 骨架化端點距離分析 的斷字檢測方法,並提供完整的 Python 實作。 2. 斷字檢測的
Thumbnail
在 Python 中,處理檔案路徑時,反斜槓 \ 是一個特殊的字元,它常用於轉義序列(例如 \n 代表換行符號)。 因此,如果你直接在字串中使用反斜槓,可能會產生轉義字元的誤解。為了避免路徑中的反斜槓 \ 需要轉義的問題,這種情況下會導致路徑解析錯誤。 本文將提供幾種方法來解決此問題。 先
Thumbnail
在 Python 中,處理檔案路徑時,反斜槓 \ 是一個特殊的字元,它常用於轉義序列(例如 \n 代表換行符號)。 因此,如果你直接在字串中使用反斜槓,可能會產生轉義字元的誤解。為了避免路徑中的反斜槓 \ 需要轉義的問題,這種情況下會導致路徑解析錯誤。 本文將提供幾種方法來解決此問題。 先
Thumbnail
本文主要介紹使用Numpy實現一個尋找邊界的方法,在用這個方法延伸去判斷2D條碼中圖案L角,根據預定義的方向角度對應表來判斷圖像的角度(0 度、90 度、180 度或 270 度) 設計邏輯 數據過濾: 函式 __filtered_positions 確保在對數據進行處理之前,能夠有效地過濾
Thumbnail
本文主要介紹使用Numpy實現一個尋找邊界的方法,在用這個方法延伸去判斷2D條碼中圖案L角,根據預定義的方向角度對應表來判斷圖像的角度(0 度、90 度、180 度或 270 度) 設計邏輯 數據過濾: 函式 __filtered_positions 確保在對數據進行處理之前,能夠有效地過濾
Thumbnail
這篇文章,會帶著大家複習以前學過的 區間DP框架, 並且以回文子字串、回文子序列的應用題與概念為核心, 貫穿一些相關聯的題目,透過框架複現來幫助讀者理解這個演算法框架。 回文字串的基本定義 s = s[::-1] 也就是說字串s的正序 和 逆序完全相同。 回文字串的基本結構 空字串"
Thumbnail
這篇文章,會帶著大家複習以前學過的 區間DP框架, 並且以回文子字串、回文子序列的應用題與概念為核心, 貫穿一些相關聯的題目,透過框架複現來幫助讀者理解這個演算法框架。 回文字串的基本定義 s = s[::-1] 也就是說字串s的正序 和 逆序完全相同。 回文字串的基本結構 空字串"
Thumbnail
題目敘述 題目會給定我們一個字串s,要求我們反轉字串s中所有母音字元的順序,並且以字串的形式輸出。 註: 母音字元為a, e, i, o, u 或者 A, E, I, O, U 題目的原文敘述 測試範例 Example 1: Input: s = "hello" Output: "ho
Thumbnail
題目敘述 題目會給定我們一個字串s,要求我們反轉字串s中所有母音字元的順序,並且以字串的形式輸出。 註: 母音字元為a, e, i, o, u 或者 A, E, I, O, U 題目的原文敘述 測試範例 Example 1: Input: s = "hello" Output: "ho
Thumbnail
題目敘述 題目給定我們一顆二元樹的根節點,要求我們計算出從根節點到葉子節點的偽回文路徑路徑有幾條? 偽回文路徑路徑 的定義: 路徑經過重新排列之後,可以形成回文Palindrome,也就是頭尾鏡像對稱。 ​ 例如: 1 -> 3 -> 3 重新排列之後,可以形成 3 -> 1 -> 3
Thumbnail
題目敘述 題目給定我們一顆二元樹的根節點,要求我們計算出從根節點到葉子節點的偽回文路徑路徑有幾條? 偽回文路徑路徑 的定義: 路徑經過重新排列之後,可以形成回文Palindrome,也就是頭尾鏡像對稱。 ​ 例如: 1 -> 3 -> 3 重新排列之後,可以形成 3 -> 1 -> 3
Thumbnail
Basic python data structure
Thumbnail
Basic python data structure
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News