2017-02-08 1 views
0

Je n'arrive pas à visualiser les images couleur de la caméra RealSense R200 à l'aide de l'interface python-opencv. La fenêtre est vide lorsque j'exécute ce script. Lorsque je commente out'cv2.namedWindow ("Image window", 1) ', il montre la première image.Impossible d'afficher les images couleur à l'aide d'opencv imshow

import roslib 
import sys 
import rospy 
import cv2 
from std_msgs.msg import String 
from geometry_msgs.msg import Twist 
from sensor_msgs.msg import Image 
from rospy.numpy_msg import numpy_msg 
#from rospy_tutorials.msg import Floats 
from cv_bridge import CvBridge, CvBridgeError 
import numpy as np 
import math; 
import cv2; 
#import matplotlib.pyplot as plt; 
import sys; 
#import caffe; 
import socket; 
#from sklearn import datasets; 
import subprocess; 

import message_filters 
from rospy.numpy_msg import numpy_msg 
import time 
##################### 

import os.path 


class image_converter: 

# Initializing variables, publishers and subscribers 
    def __init__(self): 
    print 'show window' 
    cv2.namedWindow("Image window", 1) 

    self.bridge = CvBridge() 

    self.image_sub = rospy.Subscriber("/camera/rgb/image_color", Image, self.callback) 


    # The main callback that processes the color and depth data.  
    def callback(self,color): 


    start = time.time() 
    # acquiring color and depth data (from ROS-python tutorial) 
    try: 

     frame = self.bridge.imgmsg_to_cv2(color, "bgr8") 
    except CvBridgeError, e: 
     print e 

    frame = np.array(frame, dtype=np.uint8) 

    cv2.imshow("Image window", frame) 
    print 'test' 
    cv2.waitKey(0) 


def main(args): 
    ic = image_converter() 
    rospy.init_node('image_converter', anonymous=True) 
    try: 
    rospy.spin() 
    except KeyboardInterrupt: 
    print "Shutting down" 
    cv2.destroyAllWindows() 

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

Répondre

0

Êtes-vous sûr de la valeur des indicateurs namedWindow? Je vois que vous utilisez un int là-bas, mais dans les docs here vous pouvez trouver les bons indicateurs, à la fois pour C++ et python.

J'utilise habituellement OpenCV en C++, donc je ne l'ai pas testé, mais il devrait fonctionner comme ceci:

cv2.namedWindow("Display window", cv2.WINDOW_AUTOSIZE); 

Vous pouvez également définir une fonction de spectacle comme celui-ci, si elle est pratique pour vos besoins :

def show(image, name="Image"): 
    ''' 
    Routine to display the image. 
    ''' 
    cv2.namedWindow(name, cv2.WINDOW_NORMAL) 
    cv2.imshow(name, image) 
    cv2.waitKey(0) 

la fonction est très trivial, mais je ne code pas par moi-même, donc c'est le source de ce deuxième extrait de code.

+1

Ces macros sont généralement liées à des types enum. Si vous imprimez cv2.WINDOW_AUTOSIZE il renvoie 1 – NAmorim

+0

Comme dit, n'avait pas vérifié, je suggérais de vérifier, merci pour votre clarification! – valleymanbs

+0

ok l'a corrigé. cv2.waitKey (30) au lieu de cv2.waitKey (0) –