Ask Your Question
0

Opencv Error

asked 2020-02-09 15:32:25 -0600

GGR007 gravatar image

Hello i use opencv in ros melodic on ubuntu 18, i use a kinectv2 for FullHd image, and an combination of filter to recognize ad object, in the same node have a topic witch pub the obj position. This is a code used for read the value of this point in depth image, is a 'mono16' image, but i have this error.

#!/usr/bin/env python

import roslib
import sys
import rospy
import cv2
import math, time
import numpy as np

from std_msgs.msg import String
from sensor_msgs.msg import Image
from geometry_msgs.msg import Point
from cv_bridge import CvBridge, CvBridgeError


class image_converter_depth :
    def __init__(self):

        self._t0 = time.time()
        self.obj_point = Point()

        self.blob_x         = 0.0
        self.blob_y         = 0.0
        self._time_detected = 0.0

        self.blob_sub = rospy.Subsciber("blob/point_blob",Point, self.update_blob)
        rospy.loginfo("Subsciber to blob point set")
        self.image_pub = rospy.Publisher("Depth_image",Image)
        rospy.loginfo("Publisher with circle in  depth image ")
        self.obj_pub = rospy.Publisher("blob/obj_point",Point)
        self.bridege = CVBridge()
        self.image_sub = rospy.Subsciber("/kinect2/sd/image_depth",Image,self.callback)
        rospy.loginfo("Subsciber sd to depth image ")

    def callback(self,data):
        try:
            cv_image=self.bridge.image_to_cv2(data,"mono16")
        except CvBridgeError as e :
            print(e)
            (rows,cols,channels)=cv_image.shape
            print(channels)
            if ((int(rows/2))<int(self.blob_x)<(1920-int(rows/2))):
                if (int(cols/2)<int(self.blob_y)<1080-int(cols/2)):
                    """x_depth = self.blob_x-(960-int(rows/2))
                    y_depth = self.blob_y-(540-int(cols/2))
                    self.obj_point.z = cv_image[x_depth,y_depth]
                    self.obj_pub.publish(self.obj_point)"""
                    cv2.circle(cv_image, (50,50), 10, 255)
    try:
        self.image_pub.publish(self.bridge.cv2_to_imgmsg(cv_image,"mono16"))
    except CvBridgeError as e :
        print(e)

def is_detected(self):
        return(time.time() - self._time_detected < 1.0)
def update_blob(self,message):
    self.blob_x = message.x
    self.blob_y = message.y
    self._time_detected = time.time()

def main (args):
    ic = image_converter_depth()
    rospy.init("Get_Obj_Pos", anononymus=True)
    try:
        rospy.spin()
    except KeyboardInterrupt:
        print("Shutting down")
    cv2.destroyAllWindows()

if __name__ == '__main__':
    main(sys.argv)

and the error is

Traceback (most recent call last):
  File "/home/finokkio/catkin_ws/src/Get_Obj_Pos/src/Get_Pos.py", line 67, in <module>
    main(sys.argv)
  File "/home/finokkio/catkin_ws/src/Get_Obj_Pos/src/Get_Pos.py", line 58, in main
    ic = image_converter_depth()
  File "/home/finokkio/catkin_ws/src/Get_Obj_Pos/src/Get_Pos.py", line 26, in __init__
    self.blob_sub = rospy.Subsciber("blob/point_blob",Point, self.update_blob)
AttributeError: 'module' object has no attribute 'Subsciber'
edit retag flag offensive close merge delete

Comments

self.blob_sub = rospy.Subsciber("blob/point_blob",Point, self.update_blob)

It's Subscriber, not Subsciber.

Note the r after the c.

gvdhoorn gravatar imagegvdhoorn ( 2020-02-09 15:39:07 -0600 )edit

thanks but now i have this error

GGR007 gravatar imageGGR007 ( 2020-02-09 15:41:09 -0600 )edit
Traceback (most recent call last):
  File "/home/finokkio/catkin_ws/src/Get_Obj_Pos/src/Get_Pos.py", line 16, in <module>
    class image_converter_depth :
  File "/home/finokkio/catkin_ws/src/Get_Obj_Pos/src/Get_Pos.py", line 50, in image_converter_depth
    self.image_pub.publish(self.bridge.cv2_to_imgmsg(cv_image,"mono16"))
NameError: name 'self' is not defined
GGR007 gravatar imageGGR007 ( 2020-02-09 15:41:20 -0600 )edit

You also misspelled self.bridege = CVBridge()

Please do look over your code a little bit.

stevemacenski gravatar imagestevemacenski ( 2020-02-09 17:31:42 -0600 )edit

thanks i correct but have the same error

GGR007 gravatar imageGGR007 ( 2020-02-10 03:42:11 -0600 )edit

1 Answer

Sort by ยป oldest newest most voted
0

answered 2020-02-10 18:52:43 -0600

jayess gravatar image

Try indenting the line

try:
    self.image_pub.publish(self.bridge.cv2_to_imgmsg(cv_image,"mono16"))
except CvBridgeError as e :
    print(e)

so that's a part of the callback method. That's why the error says

NameError: name 'self' is not defined

because it's not part of the method. Remember that indentation is very important for Python.

edit flag offensive delete link more

Your Answer

Please start posting anonymously - your entry will be published after you log in or create a new account.

Add Answer

Question Tools

1 follower

Stats

Asked: 2020-02-09 15:32:25 -0600

Seen: 20 times

Last updated: Feb 10