ValueError: array to be byte-swapped is read-only
Error when converting ros sensor_msgs/msg/Image.
msg = deserialize_cdr(rawdata, connection.msgtype)
img = message_to_cvimage(msg)
I managed to fix error: by adding "copy()" before byteswap
def image_to_cvimage(msg: Image, color_space: Optional[str] = None) -> Imagebytes:
"""Convert sensor_msg/msg/Image to OpenCV image.
Args:
msg: Image message.
color_space: Color space of output image.
Returns:
OpenCV image.
"""
_, _, typestr, nchan = to_cvtype(msg.encoding)
shape = (msg.height, msg.width) if nchan == 1 else (msg.height, msg.width, nchan)
dtype = numpy.dtype(typestr) # .newbyteorder('>' if msg.is_bigendian else '<')
img: Imagebytes = numpy.ndarray(shape=shape, dtype=dtype, buffer=msg.data)
if msg.is_bigendian != (sys.byteorder != 'little'):
img.copy().byteswap(inplace=True) #<------------------------------------- error here
if color_space:
return convert_color(img, msg.encoding, color_space)
return img
Edited by jacob matthes