我想在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。
答案 0 :(得分:4)
image
是None
。 cv2.imread
无法找到文件时返回None
。 (在我看来,这是一个值得怀疑的设计决定。)
>>> import cv2
>>> image = cv2.imread('does not exist')
>>> image is None
True
您几乎肯定提供了错误的文件名或错误的文件相对路径。 (当前调用imread
文件的方式必须与Python脚本位于同一目录中。)
答案 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]