2 回答

TA貢獻(xiàn)1797條經(jīng)驗(yàn) 獲得超6個(gè)贊
事實(shí)上:
#!/usr/bin/env python
import rospy
import urllib2? # for downloading an example image
from PIL import Image
from sensor_msgs.msg import Image as SensorImage
import numpy as np
if __name__ == '__main__':
? ? pub = rospy.Publisher('/image', SensorImage, queue_size=10)
? ? rospy.init_node('image_publisher')
? ? im = Image.open(urllib2.urlopen('https://cdn.sstatic.net/Sites/stackoverflow/Img/apple-touch-icon.png'))
? ? im = im.convert('RGB')
? ? msg = SensorImage()
? ? msg.header.stamp = rospy.Time.now()
? ? msg.height = im.height
? ? msg.width = im.width
? ? msg.encoding = "rgb8"
? ? msg.is_bigendian = False
? ? msg.step = 3 * im.width
? ? msg.data = np.array(im).tobytes()
? ? pub.publish(msg)

TA貢獻(xiàn)1806條經(jīng)驗(yàn) 獲得超8個(gè)贊
我對 ROS 一無所知,但我經(jīng)常使用?PIL,所以如果其他人知道得更好,請 ping 我,我會(huì)刪除這個(gè)“最佳猜測”答案。
所以,似乎你需要從 .因此,您需要:PIL Image
'header',
'高度',
'寬度',
'編碼',
'is_bigendian',
'步驟',
“數(shù)據(jù)”
因此,假設(shè)您這樣做:
im?=?Image.open('test.jpg')
您應(yīng)該能夠使用:
你需要解決的事情
im.height
從PIL Image
im.width
從PIL Image
可能
const std::string RGB8 = "rgb8"
可能無關(guān)緊要,因?yàn)閿?shù)據(jù)是 8 位的
可能是因?yàn)樗敲肯袼?RGB 3 個(gè)字節(jié)
im.width * 3
np.array(im).tobytes()
在任何人標(biāo)記這個(gè)答案之前,沒有人說答案必須是完整的——它們可以“希望有幫助”!
請注意,如果您的輸入圖像是PNG格式,則應(yīng)檢查,如果是(即調(diào)色板模式),請立即運(yùn)行:im.mode
"P"
im?=?im.convert('RGB')
以確保它是 3 通道 RGB。
請注意,如果輸入圖像為 PNG 格式且包含 Alpha 通道,則應(yīng)將 to 和 set .encoding
"rgba8"
step = im.width * 4
- 2 回答
- 0 關(guān)注
- 169 瀏覽
添加回答
舉報(bào)