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格式。整个的程序流程如下:
- 用scipy.io.loadmat读取mat文件
- 将读取的mat文件从float转成uint8格式
- 将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时的舍入很多,所以结果有问题。