2017-04-20 93 views
2

我想要訪問然後在Python中重新着色圖像的像素。幾個不同的教程,包括this one使用此方法來訪問像素:使用cv2訪問圖像的像素

import cv2 
import numpy as np 
image = cv2.imread('ironman.bmp') 
pixel = image[200, 500] 
print pixel 

我試了一下,但pixel = image[200, 500]命令後,我收到以下錯誤信息:

Traceback (most recent call last): 
    File "<pyshell#3>", line 1, in <module> 
    pixel = image[200, 500] 
TypeError: 'NoneType' object is not subscriptable 

一些研究,我想通了之後錯誤消息意味着image[200, 500]的值是None。但是教程使用這個代碼沒有這個問題。有人能告訴我我可能會做錯什麼嗎?我正在使用Python 3.6.0。

+0

請檢查值in'image' ,我認爲這是'沒有'。 –

+0

什麼是圖像層? 'pixel = image [200,500,0]'怎麼樣? – jean

回答

3

imageNonecv2.imread返回None當它找不到該文件。 (一個可疑的設計決定,在我看來)。

>>> import cv2 
>>> image = cv2.imread('does not exist') 
>>> image is None 
True 

你幾乎可以肯定是提供了一個錯誤的文件名或文件錯誤的相對路徑。 (你調用imread的方式,目前這個文件必須和你的Python腳本在同一個目錄中。)

+0

看來問題出在我給文件的路徑上。雖然路徑是正確的,但其中一個文件夾的字母不是美國字母(é)。我重命名後,腳本運行沒有問題。感謝您的幫助! –

2

你有的代碼本身沒有錯誤。要麼你有下列問題之一:

  • 的映像路徑沒有被正確提及

    1. 你提到的圖像文件不存在(或)
    2. 也保證如果圖像格式正確提到

    我算出你的代碼爲我所選擇的圖像:

    import cv2 
    
    #---I have passed the image path in a variable called filename which is accessed by cv2.imread() function--- 
    
    filename = 'C:\\Users\\Mark\\Desktop\\stack\\Original.jpg' 
    image = cv2.imread(filename) 
    pixel = image[200, 500] 
    print pixel 
    

    其結果是:

    [179 147 82] 
    

    如果你讀了灰度圖像,結果就大不一樣:

    filename = 'C:\\Users\\Mark\\Desktop\\stack\\Original.jpg' 
    image = cv2.imread(filename, 0) 
    pixel = image[200, 500] 
    print pixel 
    

    結果:

    [131]