使用cv2访问图像的像素

时间:2017-04-20 12:04:19

标签: python opencv

我想在Python中访问然后重新着色图像的像素。几个不同的教程,包括this one使用此方法来访问像素:

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。

2 个答案:

答案 0 :(得分:4)

imageNonecv2.imread无法找到文件时返回None。 (在我看来,这是一个值得怀疑的设计决定。)

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

您几乎肯定提供了错误的文件名或错误的文件相对路径。 (当前调用imread文件的方式必须与Python脚本位于同一目录中。)

答案 1 :(得分:2)

您所拥有的代码本身没有错误。您遇到以下问题之一:

  1. 您提到的图片文件不存在(或)
  2. 图像路径未正确提及
  3. 同时确保图像格式是否正确提及
  4. 我为您选择的图像设计了代码:

    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]