AttributeError:image_converter实例没有属性

时间:2019-05-27 16:39:45

标签: python ros

我需要使用来自图像回调的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)


1 个答案:

答案 0 :(得分:0)

问题是属性cv_imageptcldgen中使用它调用时还不可用。

cv_image仅在rgbcallback中设置,但也在depthcallback中使用。如果在调用depthcallback之前调用rgbcallback,则该属性根本不存在(尚未)。结果是Attribute Error

要解决您的问题,您需要在初始化类__init__时初始化属性,例如,将其设置为self.cv_image = None之类的值。