python – 图像的轮廓图给出:TypeError输入必须是2D数组错误
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了python – 图像的轮廓图给出:TypeError输入必须是2D数组错误,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2809字,纯文字阅读大概需要5分钟。
内容图文
![python – 图像的轮廓图给出:TypeError输入必须是2D数组错误](/upload/InfoBanner/zyjiaocheng/724/600bc07151884cd7803a18b2006a83f1.jpg)
我正在使用Debian Linux和python 2.7.
我正在阅读图像并尝试处理它但我显示以下错误.有人可以告诉我我做错了什么吗?
import Image
import scipy
from scipy import ndimage
import matplotlib.pyplot as plt
import numpy as np
from scipy import misc
import scipy.misc
img = scipy.misc.imread("/home/subhradeep/Desktop/test.jpg")
array=np.asarray(img)
plt.figure(figsize=(10, 3.6))
plt.subplot(131)
plt.imshow(array, cmap=plt.cm.gray)
plt.subplot(132)
plt.imshow(array, cmap=plt.cm.gray, vmin=10, vmax=100)
plt.axis('off')
plt.subplot(133)
plt.imshow(array, cmap=plt.cm.gray)
plt.contour(array, [160, 211])
plt.axis('off')
plt.subplots_adjust(wspace=0, hspace=0., top=0.99, bottom=0.01, left=0.05,right=0.99)
plt.show()
我收到以下错误消息
Traceback (most recent call last):
File "1saveimg.py", line 22, in <module>
plt.contour(array, [160, 211])
File "/usr/lib/pymodules/python2.7/matplotlib/pyplot.py", line 2632, in contour
ret = ax.contour(*args, **kwargs)
File "/usr/lib/pymodules/python2.7/matplotlib/axes.py", line 7976, in contour
return mcontour.QuadContourSet(self, *args, **kwargs)
File "/usr/lib/pymodules/python2.7/matplotlib/contour.py", line 1414, in __init__
ContourSet.__init__(self, ax, *args, **kwargs)
File "/usr/lib/pymodules/python2.7/matplotlib/contour.py", line 860, in __init__
self._process_args(*args, **kwargs)
File "/usr/lib/pymodules/python2.7/matplotlib/contour.py", line 1427, in _process_args
x, y, z = self._contour_args(args, kwargs)
File "/usr/lib/pymodules/python2.7/matplotlib/contour.py", line 1488, in _contour_args
x, y = self._initialize_x_y(z)
File "/usr/lib/pymodules/python2.7/matplotlib/contour.py", line 1573, in _initialize_x_y
raise TypeError("Input must be a 2D array.")
TypeError: Input must be a 2D array.
我也尝试过Image.open(),但是也会抛出相同的错误.
解决方法:
这里的问题是plt.contour只绘制2d数组,但大多数jpg文件是3d,因为有三种颜色.你通过使用灰度色图(cm.gray)进行绘图来隐藏这个事实,它只是改变它的外观(imshow仍然显示彩色图像,只是用灰色’墨水’打印).你有几个选择,主要是:
1)以某种方式将其转换为2d,最简单的方法是将图像设置为黑白(灰度).以下是一些方法:
gray = img.sum(-1) # sums along the last (color) axis
要么
gray = np.sqrt((img*img).sum(-1)) # to do a magnitude of the color vector
要么
from PIL import Image
img = Image.open("/home/subhradeep/Desktop/test.jpg")
gray = img.convert('L') # 'L' stands for 'luminosity'
gray = np.asarray(gray)
2)分别绘制每种颜色:
r, g, b = np.rollaxis(img, -1)
plt.contour(r, cmap=plt.cm.Reds)
plt.contour(g, cmap=plt.cm.Greens)
plt.contour(b, cmap=plt.cm.Blues)
也,
scipy.misc.imread返回一个数组,因此你可以跳过arr = np.asarray(img)这一行,并按原样使用img.如果您决定使用PIL.Image,则返回PIL.Image对象(因此可以使用img.convert方法),这不是真的.
这样做是多余的,只需选择一个或另一个:
from scipy import misc
import scipy.misc
在这里,如果您转换为灰度:
并且,如果您分别绘制每种颜色:
内容总结
以上是互联网集市为您收集整理的python – 图像的轮廓图给出:TypeError输入必须是2D数组错误全部内容,希望文章能够帮你解决python – 图像的轮廓图给出:TypeError输入必须是2D数组错误所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。