天天看點

解決OpenCV error: (-215:Assertion failed) size.width>0 && size.height>0 in function 'cv::imshow'

剛開始學習OpenCV,嘗試了第一個代碼,就遇到了問題,很無奈。

錯誤提示為:

error: (-215:Assertion failed) size.width>0 && size.height>0 in function 'cv::imshow'

解決OpenCV error: (-215:Assertion failed) size.width>0 && size.height>0 in function 'cv::imshow'

由于不熟練,以為問題出在inshow上,但針對性的去看錯誤,然後搜尋了一些大佬的筆記發現,最終問題出在了路徑上。

原來最早的時候,我把圖檔放在了“.vscode”中,但是發現并不是如此,于是就嘗試了絕對路徑,便出現這種錯誤。

其實如果仔細看就會發現,在路徑中,最後的“ 1.jpg ”中的“ 1 ”顔色是不一樣的,突然想到,這個絕對路徑是複制過來的,想到了Python學習中的轉義字元,試着針對這個搜尋了一下,修改正斜杠“\”為反斜杠“/”便解決了問題。

借着這個機會,又去學了一下轉義字元,原來最早的對于斜杠的定義出自Unix,Unix使用“/”作為路徑分割符,相對應的網絡服務出現在Unix上,是以網址現在都是正斜杠“/”。而Windows應該是為了特殊吧,路徑中用的反斜杠“\”,但是現今好像Windows從Dos消亡後也已經模糊了兩個斜杠的差別,在資源浏覽器以及Windows指令提示符中正斜杠反斜杠互換都可以的。

常見的網絡路徑都是以正斜杠“/”,不然就會出錯。

Python中  r'xxxx' 轉義  ,在前面加上r就可以讓後面字元串的内容失去轉義意義(這裡和\r 将光标的位置回退到本行的開頭位置的意義不同)。

s1 = r'使用了r,\n 就隻是了\n' 
s2 = '去掉r,\n就出現回車了\n' 
print(s1)
print(s2)
           
解決OpenCV error: (-215:Assertion failed) size.width>0 && size.height>0 in function 'cv::imshow'

再通過四行代碼進行對比

path1 = r"C:\Windows\temp\new.jpg"  
#"\"本來是字元串中的特殊字元,也就是轉義字元,會讓後面的内容進行轉義,加上r後變為原始字元,則不會對字元串中的“n”、“t”、“r”等字元進行轉義。

path2 = r"c:\windows\temp\new.jpg" 
#和上面的内容進行對比,路徑中的正斜杠“/”以及反斜杠“\”可以進行互換,經過簡單的嘗試發現,隻有最後檔案名前面的那個斜杠一定不能是反斜杠“\”,測試樣例少,不知道是不是所有的都是如此。

path3 = "c:\\windows\\temp\\new.jpg"
#用一個"\"取消第二個"\"的轉義作用,在代碼中比較常見。

path4 = "c:/windows/temp/new.jpg"
#直接使用正斜杠“/”,也就省去了絕對路徑時反斜杠的麻煩。