Python 非类型错误。显示转换
我想做一些程序,从网络摄像头捕获图像,然后裁剪它。在裁剪之后,我做了一些图像处理,从这个过程中它将运行我的机器人。以下是完整的程序:Python 非类型错误。显示转换,python,threshold,Python,Threshold,我想做一些程序,从网络摄像头捕获图像,然后裁剪它。在裁剪之后,我做了一些图像处理,从这个过程中它将运行我的机器人。以下是完整的程序: import cv2 from cv2 import * import numpy as np import pylab import pymorph import mahotas from matplotlib import pyplot from PIL import Image # initialize the camera cam = VideoCap
import cv2
from cv2 import *
import numpy as np
import pylab
import pymorph
import mahotas
from matplotlib import pyplot
from PIL import Image
# initialize the camera
cam = VideoCapture(0) # 0 -> index of camera
s, img = cam.read()
# frame captured without any errors
if s:
imwrite("img.jpg",img) #save image
#Crop Image
imageFile = "img.jpg"
im1 = Image.open(imageFile)
def imgCrop(im):
box = (0, 199, 640, 200)
region = im.crop(box)
region.save('crop.jpg')
cImg = imgCrop(im1)
#thresholding
def greyImg(im):
gray = im.convert('L')
bw = gray.point(lambda x: 0 if x<128 else 255, '1')
bw.save("bw.jpg")
tImg = greyImg(cImg )
#direction
def find_centroid(im, rez):
width, height = im.size
XX, YY, count = 0, 0, 0
for x in xrange(0, width, rez):
for y in xrange(0, height, rez):
if im.getpixel((x, y)) == 255:
XX += x
YY += y
count += 1
return XX/count, YY/count
print find_centroid(tImg, 1)
def robo_direct():
cen = find_centroid(im, 1)
diff = cen[0] - 320
if diff > 10:
print 'right'
if diff < -10:
print 'left'
else:
print 'straight'
print robo_direct()
这是因为
im
是None
对象
请使用以下命令重试代码:
print im is None
你会看到的。我不知道threshold是什么,但很明显您创建的
im
对象是错误的。您的函数imgCrop(im1)
没有返回语句,因此返回None
。然后您的greyImg(im)
函数也没有返回语句,也将返回None
要修复此问题,请将返回语句添加到第一个返回区域
和第二个返回bw
的函数中
另外,您的
robo\u direct()
函数应该返回并且不打印方向,以便在语句print robo\u direct()中调用它
将打印方向。用另一个程序编译和包含在编程中是什么意思?
听起来好像im现在是一个图像对象。@RedX我正在编辑我的问题。。请帮我解释一下好吗?因为我不太明白这个问题。我是编程新手,所以我还在学习。@Python函数中没有return语句的timekeeper隐式返回None
。这两个函数没有返回语句,因此它们也返回None
。由于您显然希望它们返回在函数中计算的值,因此我建议返回语句应该用于这些函数。好的,谢谢…我已经解决了…但是出现了新问题。。回溯(最后一次调用):文件“compile3.py”,第51行,在find_形心返回XX/count,YY/count zerodivision错误:整数除法或模乘零
print im is None