我试图做一个节点来捕获视频从网络摄像头并发布它,但首先我试图显示图像与命令“cv2.imshow”,但这不起作用.错误是这样的:
Traceback (most recent call last): File "/ws/src/test/scripts/testing-camera.py", line 29, in <module> cv2.imshow("Image",img) TypeError: mat is not a numpy array, neither a scalar
我在Docker上使用ROS Melodic,使用ubuntu 22.04。我是在ROS上使用OpenCV的新手,所以如果你能推荐一些教程,我会很感激。Python版本是2.7.17
这是我的代码:
#!/usr/bin/env python
import rospy
import cv2
import numpy as np
from sensor_msgs.msg import Image
from cv_bridge import CvBridge, CvBridgeError
video = cv2.VideoCapture(0)
img = []
class Camera:
def __init__(self):
self.publisher = rospy.Publisher('camera_img', Image, queue_size = 10)
self.status, img = video.read()
self.bridge = CvBridge()
print(self.status)
def publish_image(self):
image = self.bridge.cv2_to_imgmsg(img,encoding="passthrough")
self.publisher.publish(image)
print("Se publico la imagen")
if __name__=='__main__':
try:
rospy.init_node('camera_node')
rate = rospy.Rate(10)
cam = Camera()
cv2.imshow("Image",img)
while not rospy.is_shutdown():
cam.publish_image()
rate.sleep()
except rospy.ROSInterruptException:
pass
我试着改变
img = 0
到
img = []
及以后
img = np.array([])
但这不管用
1条答案
按热度按时间8cdiaqws1#
本教程很好地开始使用ros & opencv(它是针对ros2的,但我认为它使概念清晰):https://automaticaddison.com/getting-started-with-opencv-in-ros-2-foxy-fitzroy-python/