cv::mat 转 QImage
时间: 2023-08-30 12:11:10 浏览: 182
以下是将cv::Mat转换为QImage的示例代码:
```c++
QImage matToQImage(const cv::Mat& mat) {
// 1. 获取Mat的宽度和高度
int width = mat.cols;
int height = mat.rows;
// 2. 创建QImage对象
QImage image(width, height, QImage::Format_RGB888);
// 3. 复制数据
uchar* srcData = mat.data;
uchar* dstData = image.bits();
int srcStep = mat.step;
int dstStep = image.bytesPerLine();
for (int y = 0; y < height; ++y) {
memcpy(dstData + y * dstStep, srcData + y * srcStep, width * 3);
}
return image;
}
```
解释:
1. 首先获取Mat的宽度和高度。
2. 根据宽度和高度创建QImage对象。
3. 将Mat中的数据复制到QImage中。这里需要注意的是,OpenCV中的Mat数据是以行优先存储的,而QImage中的数据是以列优先存储的,因此需要使用memcpy函数进行转换。同时,由于OpenCV中的Mat可能存在行对齐的情况,因此需要使用step参数来跨过每行的空白区域。
使用示例:
```c++
cv::Mat mat = cv::imread("image.png");
QImage image = matToQImage(mat);
```
注意事项:
1. 该函数只适用于RGB888格式的Mat,如果Mat是其他格式,则需要对数据进行转换。
2. 由于QImage中的数据是以列优先存储的,因此在显示时需要将其旋转90度,否则图像会被翻转。
阅读全文