簡體   English   中英

OpenCV Python 不使用 imread() 打開圖像

[英]OpenCV Python not opening images with imread()

我不完全確定為什么會發生這種情況,但我正在制作一個程序,並且在嘗試讓 opencv 使用 imread 打開圖像時遇到了很多問題。 我不斷收到錯誤消息,說圖像寬 0px,高 0px。 這對我來說沒有多大意義,所以我在這里搜索,我也沒有從 SO 那里得到任何答案。

我拍了大約 20 張照片,它們都使用相同的設備。 可能其中 8 個實際上打開並正常工作,其余的則沒有。 它們也沒有損壞,因為它們在其他程序中打開。 我已經三重檢查了路徑,他們使用的是完整路徑。

還有其他人有這樣的問題嗎? 我的所有文件都是 .jpg,我沒有看到任何問題。 這是一個錯誤還是我做錯了什么?

這是我正在使用的代碼片段,它在我結束時重現了錯誤。

imgloc = "F:\Kyle\Desktop\Coinjar\Test images\ten.png"
img = cv2.imread(imgloc)
cv2.imshow('img',img)

當我更改文件時,我只是調整文件本身的名稱,整個路徑不會改變,它只是拒絕接受我的一些本質上相同的圖像。

我在嘗試使用 img.shape 的代碼的后面部分收到此錯誤

Traceback (most recent call last):
  File "F:\Kyle\Desktop\Coinjar\CoinJar Test2.py", line 14, in <module>
    height, width, depth = img.shape
AttributeError: 'NoneType' object has no attribute 'shape'

當我嘗試從上面的代碼片段中顯示一個窗口時,我收到了這個錯誤。

Traceback (most recent call last):
  File "F:\Kyle\Desktop\Coinjar\CoinJar Test2.py", line 11, in <module>
    cv2.imshow('img',img)
error: ..\..\..\..\opencv\modules\highgui\src\window.cpp:261: error: (-215) size.width>0 && size.height>0 in function cv::imshow

可能您對文本中\\特殊含義有\\ - 如\\t\\n

使用\\\\代替\\

imgloc = "F:\\Kyle\\Desktop\\Coinjar\\Test images\\ten.png"

或使用前綴r'' (它會將其視為沒有特殊代碼的raw文本)

imgloc = r"F:\Kyle\Desktop\Coinjar\Test images\ten.png"

編輯:

某些模塊在 Linux 路徑中接受偶數/ like

imgloc = "F:/Kyle/Desktop/Coinjar/Test images/ten.png"

根據我的經驗,太長(取決於操作系統)的文件路徑也會導致cv2.imread()失敗。

此外,當它確實失敗時,它通常會默默地失敗,因此甚至很難意識到它失敗了,並且通常代碼更進一步的東西會引發錯誤。

希望這可以幫助。

注意:

  • 用可靠的圖片嘗試imread()
  • 以及您上下文中的正確路徑(參見 Kyle772 答案)。 對我來說//\\

我花了幾個小時嘗試使用瀏覽器左鍵單擊保存的 2 個圖像。 一旦我拍攝了個人相機圖像,它就可以正常工作。

Spyder 屏幕截圖

    #context  windows10 / anaconda / python 3.2.0
    import cv2
    print(cv2.__version__) # 3.2.0
    imgloc = "D:/violettes/Software/Central/test.jpg" #this path works fine.  
    # imgloc = "D:\\violettes\\Software\\Central\\test.jpg"   this path works fine also. 
    #imgloc = "D:\violettes\Software\Central\test.jpg" #this path fails.

    img = cv2.imread(imgloc)
    height, width, channels = img.shape
    print (height, width, channels)

我對每個面臨同樣問題的人的建議是試試這個:

cv2.imshow("image", img)

img是關鍵字。 永遠不要忘記。

我在cv.imread()找不到我的圖像時遇到了很多麻煩。 我想我嘗試了所有涉及改變路徑的事情。 os.path.exists(file_path)函數也給了我一個 True。

我最終通過使用imageio加載圖像解決了這個問題。

img = imageio.imread('file_path')

這也會將 img 加載到一個 numpy 數組中,您可以在這個對象上使用像cv.matchTemplate()這樣的函數。 但是我會建議您是否正在處理多個圖像,然后您使用 imageio 讀取所有圖像,因為我發現.imread()生成的數組與文件中的兩個庫(opencv、imageio)之間存在差異,它們都可以打開。

我希望我能幫助別人

在 Windows 上cv.imread同樣的問題:從子文件夾讀取 jpg 文件時, cv.imread返回None 相同的代碼和文件夾結構適用於 Linux。

發現cv.imread處理相同的 jpg 文件,如果它們與 python 文件在同一個文件夾中。

我的解決方法:

  • 將圖片文件復制到python文件夾
  • cv.imread使用這個文件
  • 刪除多余的圖像文件
import os
import shutil
import cv2 as cv

image_dir = os.path.join('path', 'to', 'image')
image_filename = 'image.jpg'
full_image_path = os.path.join(image_dir, image_filename)

image = cv.imread(full_image_path)
if image is None:
    shutil.copy(full_image_path, image_filename)
    image = cv.imread(image_filename)
    os.remove(image_filename)
...

我知道問題已經得到解答,但以防萬一有人仍然無法使用 imread 加載圖像。 可能是因為字符串路徑中有字母,imread 不接受。
例如變音符號和變音符號:
.../äöü/image.jpg
.../test/image.jpg

我不完全確定為什么會這樣,但是我正在編寫程序,並且遇到很多問題,試圖讓opencv使用imread打開圖像。 我不斷收到錯誤消息,指出圖片的寬度為0px,高度為0px。 這對我來說沒有多大意義,所以我在這里四處搜尋,我也沒有得到任何答案。

我已經拍攝了約20張照片,而且它們都使用同一設備。 其中可能有8個實際上可以正常打開並正常工作,而其余的則不能。 它們也沒有損壞,因為它們是在其他程序中打開的。 我對路徑進行了三重檢查,它們正在使用完整路徑。

還有其他人有這樣的問題嗎? 我所有的文件都是.jpgs,但我看不到任何問題。 這是一個錯誤還是我做錯了什么?

這是我正在使用的代碼片段,正在重現錯誤。

imgloc = "F:\Kyle\Desktop\Coinjar\Test images\ten.png"
img = cv2.imread(imgloc)
cv2.imshow('img',img)

當我更改文件時,我只是調整了文件本身的名稱,整個路徑都沒有改變,只是拒絕接受我的某些圖像,這些圖像本質上是相同的。

我在嘗試使用img.shape的代碼的后面部分收到此錯誤

Traceback (most recent call last):
  File "F:\Kyle\Desktop\Coinjar\CoinJar Test2.py", line 14, in <module>
    height, width, depth = img.shape
AttributeError: 'NoneType' object has no attribute 'shape'

當我嘗試從上面的代碼片段顯示一個窗口時,出現了此錯誤。

Traceback (most recent call last):
  File "F:\Kyle\Desktop\Coinjar\CoinJar Test2.py", line 11, in <module>
    cv2.imshow('img',img)
error: ..\..\..\..\opencv\modules\highgui\src\window.cpp:261: error: (-215) size.width>0 && size.height>0 in function cv::imshow

當你得到這樣的錯誤時 AttributeError: 'NoneType' object has no attribute 'shape'

嘗試使用 new_image=image.copy

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM