cv2处理读取的mat图片文件遇到的细节问题

cv2处理读取的mat图片文件遇到的细节问题

最近在用scipy.io.loadmat读取mat文件的时候发现读取出的矩阵用cv2处理的时候出现奇怪的报错。
例如:

Layout of the output array img is incompatible with cv::Mat (step[ndims-1] != elemsize or step[1] != elemsize*nchannels)

程序思路

我的mat文件是一个二维的float矩阵,是经过MATLAB来存储成mat格式。整个的程序流程如下:

  1. 用scipy.io.loadmat读取mat文件
  2. 将读取的mat文件从float转成uint8格式
  3. 将uint8格式的矩阵用cv2加上矩形框,然后显示图片

然后出现了两个问题,一个是开头提到的画矩形框的时候cv2.rectangle报的错,第二个错是转成uint8之后的图就完全不对,看着像二值图了。

解决

Layout of the output array img is incompatible with cv::Mat (step[ndims-1] != elemsize or step[1] != elemsize*nchannels)

我是在要画的矩阵后加了个.copy(),具体原因我看大佬们也没说清楚,如下:

cv2.rectangle(matrix.copy(), (left, top), (right, bottom), color, 2)

解决 loadmat的float数据转成uint8出错问题

Data = sio.loadmat(file)[string]
Data = Data.astype(np.float64)

因为我发现loadmat之后的数据是int32的,导致我后面转成uint8时的舍入很多,所以结果有问题。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值