Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/image/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Python中在图像上编写线条和网格? 将numpy导入为np 从matplotlib导入cm 从matplotlib导入pyplot作为plt 导入图像 从scipy导入ndimage 导入图像,图像绘制 进口PIL 导入cv 进口cv2 从scipy.ndimage导入测量,形态学 从PIL导入图像 从numpy进口* 从scipy.ndimage导入筛选器 进口派拉布 进口麻花 从曼巴进口* 进口曼巴德劳 从PIL导入图像,ImageDraw img=np.asarray(Image.open('test.tif')。convert('L')) img=1*(img_Python_Image_Opencv_Matplotlib_Python Imaging Library - Fatal编程技术网

如何在Python中在图像上编写线条和网格? 将numpy导入为np 从matplotlib导入cm 从matplotlib导入pyplot作为plt 导入图像 从scipy导入ndimage 导入图像,图像绘制 进口PIL 导入cv 进口cv2 从scipy.ndimage导入测量,形态学 从PIL导入图像 从numpy进口* 从scipy.ndimage导入筛选器 进口派拉布 进口麻花 从曼巴进口* 进口曼巴德劳 从PIL导入图像,ImageDraw img=np.asarray(Image.open('test.tif')。convert('L')) img=1*(img

如何在Python中在图像上编写线条和网格? 将numpy导入为np 从matplotlib导入cm 从matplotlib导入pyplot作为plt 导入图像 从scipy导入ndimage 导入图像,图像绘制 进口PIL 导入cv 进口cv2 从scipy.ndimage导入测量,形态学 从PIL导入图像 从numpy进口* 从scipy.ndimage导入筛选器 进口派拉布 进口麻花 从曼巴进口* 进口曼巴德劳 从PIL导入图像,ImageDraw img=np.asarray(Image.open('test.tif')。convert('L')) img=1*(img,python,image,opencv,matplotlib,python-imaging-library,Python,Image,Opencv,Matplotlib,Python Imaging Library,我想在图像上放置一些网格线,但出现以下错误: import numpy as np from matplotlib import cm from matplotlib import pyplot as plt import Image from scipy import ndimage import Image, ImageDraw import PIL import cv import cv2 from scipy.ndimage import measurements, morphology

我想在图像上放置一些网格线,但出现以下错误:

import numpy as np
from matplotlib import cm
from matplotlib import pyplot as plt
import Image
from scipy import ndimage
import Image, ImageDraw
import PIL
import cv
import cv2
from scipy.ndimage import measurements, morphology
from PIL import Image
from numpy import *
from scipy.ndimage import filters
import pylab
import mahotas
from mamba import*
import mambaDraw
from PIL import Image, ImageDraw

img = np.asarray(Image.open('test.tif').convert('L'))
img = 1 * (img < 127)

draw = ImageDraw.Draw(img) 
draw.line((100,200, 150,300), fill=128)

plt.imshow(img, cmap=cm.Greys_r)
plt.show()
回溯(最近一次呼叫最后一次):
文件“C:\Documents and Settings\All Users.WINDOWS\ББimk_МММыы”第24行,在
draw=ImageDraw.draw(img)
文件“C:\Python27\lib\site packages\PIL\ImageDraw.py”,第296行,在Draw中
返回图像绘制(im,模式)
文件“C:\Python27\lib\site-packages\PIL\ImageDraw.py”,第61行,在
im.load()
AttributeError:'numpy.ndarray'对象没有属性'load'

此代码有什么问题?如何在图像上放置100x100网格?

似乎无法将其转换为
np.ndarray
。此外,还应将
宽度
参数设置为与
0
不同的值:

Traceback (most recent call last):  
  File "C:\Documents and Settings\All Users.WINDOWS\Документыline 24, in <module>  
    draw = ImageDraw.Draw(img)  
  File "C:\Python27\lib\site-packages\PIL\ImageDraw.py", line 296, in Draw  
   return ImageDraw(im, mode)  
  File "C:\Python27\lib\site-packages\PIL\ImageDraw.py", line 61, in __init__  
   im.load()  
AttributeError: 'numpy.ndarray' object has no attribute 'load'  

似乎无法将其转换为
np.ndarray
。此外,还应将
width
参数设置为与
0
不同的值:

Traceback (most recent call last):  
  File "C:\Documents and Settings\All Users.WINDOWS\Документыline 24, in <module>  
    draw = ImageDraw.Draw(img)  
  File "C:\Python27\lib\site-packages\PIL\ImageDraw.py", line 296, in Draw  
   return ImageDraw(im, mode)  
  File "C:\Python27\lib\site-packages\PIL\ImageDraw.py", line 61, in __init__  
   im.load()  
AttributeError: 'numpy.ndarray' object has no attribute 'load'  

这里的错误是将PIL图像转换为numpy数组,但随后使用numpy数组上的PIL
ImageDraw

您可以在PIL或Numpy中绘制线条,无论您喜欢哪种,但您需要使用Numpy处理Numpy对象,而使用PIL处理PIL对象

import matplotlib.pyplot as plt
from matplotlib.pyplot import cm
from PIL import Image, ImageDraw


img = Image.open( 'test.tif' ).convert('L')

draw = ImageDraw.Draw(img)
draw.line((0,200, 1000,1000), fill=123., width=4)

plt.imshow(img, cmap=cm.Greys_r)
plt.savefig('test_changed.tif')
或者对于10像素宽的网格,每100:

img[:, 100:110] = 0
顺便说一句,您的导入有点疯狂,并且弄乱了您的命名空间。对于您正在做的事情,您只需执行以下操作:

for i in range(100,1000,100):
    img[i:i+10,:] = 0
    img[:,i:i+10] = 0

例如,您只需要从numpy import*导入
将numpy导入为np
中的一个,但一旦您已经导入了它,将其重新导入为其他名称会使事情变得复杂。

您的错误是将PIL图像转换为numpy数组,但随后使用numpy数组上的PIL
ImageDraw

您可以在PIL或Numpy中绘制线条,无论您喜欢哪种,但您需要使用Numpy处理Numpy对象,而使用PIL处理PIL对象

import matplotlib.pyplot as plt
from matplotlib.pyplot import cm
from PIL import Image, ImageDraw


img = Image.open( 'test.tif' ).convert('L')

draw = ImageDraw.Draw(img)
draw.line((0,200, 1000,1000), fill=123., width=4)

plt.imshow(img, cmap=cm.Greys_r)
plt.savefig('test_changed.tif')
或者对于10像素宽的网格,每100:

img[:, 100:110] = 0
顺便说一句,您的导入有点疯狂,并且弄乱了您的命名空间。对于您正在做的事情,您只需执行以下操作:

for i in range(100,1000,100):
    img[i:i+10,:] = 0
    img[:,i:i+10] = 0

例如,您只需要从numpy import*
导入
将numpy导入为np
中的一个,但一旦您已经导入了它,将其重新导入为其他名称会使事情变得复杂。

尝试创建
img
变量,作为:
img=Image.open('test.tif')。convert('L'))
尝试将
img
变量创建为:
img=Image.open('test.tif').convert('L')
我刚刚复制了导入,抱歉,下次我会优化导入。是的,你的帖子中没有提到“我刚刚复制”,我建议你也多想想。当人们说“你尝试了什么?”“把重点想象成被试过;我的意思是,检查你发布的每一行代码,理解它,知道它为什么在那里,并确保它是有意义的。我只是复制了导入,对不起,下次我会优化它们。是的,“我只是复制”在你的帖子中很清楚,我建议你也考虑一下。当人们说“你们尝试过什么”时,把重点放在尝试上;我的意思是,检查您发布的每一行代码,理解它,知道它为什么在那个里,并确保它是有意义的。