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时的舍入很多,所以结果有问题。

你可能感兴趣的:(小错误,深度学习)