2017-02-08 8 views
0

python-opencv 인터페이스를 사용하여 R200 realsense 카메라의 컬러 이미지를 보는 데 문제가 있습니다. 이 스크립트를 실행하면 창이 비어 있습니다. out'cv2.namedWindow ("이미지 창", 1)을 주석 처리하면 첫 번째 이미지가 표시됩니다.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) 

답변

0

namedWindow 플래그 값은 확실합니까? 거기에 int를 사용하고있는 것을 볼 수 있지만, here에서 C++과 python 모두에 대해 올바른 플래그를 찾을 수 있습니다.

나는 보통 C++에서 OpenCV의를 사용하기 때문에 내가 테스트하지 않은,하지만이 같이 작동합니다 : 그것은 당신의 요구에 편리 경우

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

는 또한, 이와 같은 쇼 기능을 정의 할 수 있습니다 :

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

기능은 아주 사소한,하지만 난 나 자신에 의해 그것을 코딩하지 않았다, 그래서 이것은이 두 번째 코드의 source입니다.

+1

이러한 매크로는 일반적으로 열거 형에 바인딩됩니다. cv2.WINDOW_AUTOSIZE를 출력하면 1을 반환합니다. – NAmorim

+0

확인한 바대로, 확인을 제안했습니다. 설명해 주셔서 감사합니다! – valleymanbs

+0

괜찮 았습니다. cv2.waitKey (30) 대신 cv2.waitKey (0) –