我需要使用来自图像回调的RGB图像以及来自深度回调的深度图像。我正在使用ROS。我已经声明了全局变量。在一种情况下,如果我从RGB回调中调用函数abc()
,则会收到此错误:
'AttributeError:image_converter实例没有属性
cv_image
尽管显示了opencv
窗口中的图像。而且,如果我改为使用深度回叫中的abc()
函数,则可以正确显示图像,而不会出现任何错误。我的问题是为什么?
class image_converter:
def __init__(self):
self.bridge = CvBridge()
self.pose_sub = rospy.Subscriber("/camera/depth/image_rect_raw",Image,self.depthcallback)
self.image_sub = rospy.Subscriber("/camera/color/image_raw",Image,self.rgbcallback)
self.count = 0
self.flag = False
print(str(self.flag)+" "+str(self.count))
def rgbcallback(self,data):
try:
self.cv_image = self.bridge.imgmsg_to_cv2(data,"bgr8")
except:
print(e)
# self.ptcldgen()
def depthcallback(self,data):
try:
self.cv_depth = self.bridge.imgmsg_to_cv2(data,"16UC1")
except:
print(e)
self.ptcldgen()
def ptcldgen(self):
cv2.imshow("image",self.cv_image)
cv2.waitKey(3)
def main(args):
ic = image_converter()
rospy.init_node("image_converter",anonymous=True)
try:
rospy.spin()
except KeyboardInterrupt:
print("shut")
cv2.destroyAllWindows()
if __name__ == '__main__':
main(sys.argv)
答案 0 :(得分:0)
问题是属性cv_image
在ptcldgen
中使用它调用时还不可用。
cv_image
仅在rgbcallback
中设置,但也在depthcallback
中使用。如果在调用depthcallback
之前调用rgbcallback
,则该属性根本不存在(尚未)。结果是Attribute Error。
要解决您的问题,您需要在初始化类__init__
时初始化属性,例如,将其设置为self.cv_image = None
之类的值。