最近在做血管OCT dicom文件的三视图,分出来的纵截面像素数组用matplotlib和opencv绘制都是正常的;但用QImage中显示错误,具体表现为颜色错乱,图像错位。放大看能看到,感觉是像素错位了。
绘制出上面这个图的代码是这样
困扰了很久,最后QImage部分改为:
height, width, channel = sagittal_view.shape
bytes_per_line = 3 * width
image = QImage(sagittal_view, width,
height, bytes_per_line, QImage.Format_RGB888)
增加了bytes_per_line这个参数,此时图像显示正常了。猜测原因:QImage像素按行存储,RGB888 格式(即每个像素由 3 个字节表示的 RGB 图像),每个像素占用 3 个字节。为了确保内存中的数据对齐,每一行的字节数应该是 3 的倍数;如果行的宽度不是 3 的倍数,QImage 会在每一行的末尾添加额外的填充字节以实现对齐。可能是由于这个填补,导致错位了。指定了bytes_per_line之后就不会出错了。